【入門編】【実務効率化】見開きページのノド(綴じ代)側を考慮し、左右のページで異なるマージン幅のガイド線を自動配置するVBA – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの自動化の世界へようこそ。
マクロの記録ボタンを押して満足していた時期を抜け出し、「自分の手でCorelDRAWを完全にコントロールしたい」と願うあなたへ。ここをクリアすれば、CorelDRAW VBAの基本と、実務で本当に使えるロジックの組み方はバッチリですよ。

今回は、製本DTPの現場で誰もが一度は頭を悩ませる「見開きページのノド(綴じ代)側を考慮した、左右非対称のガイド線自動配置マクロ」を一緒に作っていきましょう。

—

なぜ、この自動化が実務で神威を発揮するのか?

冊子やカタログのデザインを作るとき、ページを開いたときの「ノド(背表紙側の綴じ代)」を考慮しなければなりません。
一般的な2ページ見開き(スプレッド)を考えてみてください。

  • 偶数ページ(左ページ): ノドは右側にあります。つまり、左側に広いマージン、右側に狭い(綴じ代用の)マージンが必要です。
  • 奇数ページ(右ページ): ノドは左側にあります。つまり、左側に狭い(綴じ代用の)マージン、右側に広いマージンが必要です。

これを全ページ手作業でガイド線を引いていると、ページ数が100ページを超えたあたりで発狂するか、確実にミスが生じます。
「なら、プログラムに計算させて一瞬で終わらせよう」というのが今回のテーマです。

—

CorelDRAW VBAにおける「ページとガイド線」の生態系

コードを書く前に、CorelDRAWの内部構造(オブジェクトのライフサイクル)を少しだけ知っておきましょう。

1. アクティブドキュメント: 今、画面で開いているデータは `ActiveDocument` で掴みます。
2. ページループ: CorelDRAWのドキュメントは `ActiveDocument.Pages` というコレクションを持っています。これに対して `For Each` ループを回すことで、全ページを巡回できます。
3. レイヤーとガイド: CorelDRAWでは、ガイド線は通常のオブジェクトとは異なり、専用の「ガイドライン層(Guides Layer)」に配置するのがDTPの鉄則です。これにより、デザイン作業中にガイドをうっかり選択して動かしてしまう事故を防げます。

—

実装コード:ノド自動計算ガイド配置マクロ

以下のコードを、CorelDRAWのVBAエディタ(Alt + F11)の標準モジュールに貼り付けてください。実務でそのまま使えるよう、ミリ単位(mm)での直感的な入力を可能にしています。

Sub CreateBindingGuides()
‘ =====================================================================
‘ 製本用 ノド(綴じ代)考慮型 左右非対称ガイド線自動配置マクロ
‘ =====================================================================
Dim doc As Document
Set doc = ActiveDocument

If doc Is Nothing Then
MsgBox “ドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

‘ — ユーザー設定値(単位:ミリメートル) —
Dim targetMargin As Double ‘ 通常の余白(天・地・小口)
Dim bindingMargin As Double ‘ ノド(綴じ代)の余白

targetMargin = 15# ‘ 通常余白を15mmに設定
bindingMargin = 25# ‘ 綴じ代余白を25mmに設定(ノド側を広く取る)

‘ CorelDRAWの内部単位(Internal Units)である「ポイント(Point)」に変換
‘ 1インチ = 25.4mm = 72ポイント なので、mmを換算します
Dim m_Target As Double
Dim m_Binding As Double
m_Target = doc.ConvertUnits(targetMargin, cdrMillimeter, cdrPoint)
m_Binding = doc.ConvertUnits(bindingMargin, cdrMillimeter, cdrPoint)

‘ — 処理の高速化と画面描画のロック —
‘ 大量ページの処理で画面がチラつくのを防ぎ、実行スピードを爆発的に上げます
doc.BeginCommandGroup
Optimization = True
EventsEnabled = False

On Error GoTo ErrorHandler

Dim p As Page
Dim docWidth As Double, docHeight As Double
Dim guideLayer As Layer

‘ ドキュメント内の全ページをループ
For Each p in doc.Pages
p.Activate

‘ ページの幅と高さを取得
docWidth = p.SizeWidth
docHeight = p.SizeHeight

‘ ガイドライン専用レイヤーを取得(なければ自動生成される特性を利用)
Set guideLayer = p.Layers(“ガイド”)
If guideLayer Is Nothing Then
Set guideLayer = p.CreateLayer(“ガイド”)
End If
guideLayer.Activate

‘ 既存のガイドが残っていると鬱陶しいのでクリア(必要に応じてコメントアウトしてください)
‘ guideLayer.Delete

‘ 【判定ロジック】見開きにおける偶数・奇数の判定
‘ Page.Index が 偶数か奇数かで、ノド(綴じ代)の左右が逆転します
Dim leftLimit As Double, rightLimit As Double

If (p.Index Mod 2 = 0) Then
‘ 偶数ページ(左側ページ):ノドは【右】
‘ 左側の余白 = 通常、 右側の余白 = 綴じ代
leftLimit = m_Target
rightLimit = docWidth – m_Binding
Else
‘ 奇数ページ(右側ページ):ノドは【左】
‘ 左側の余白 = 綴じ代、 右側の余白 = 通常
leftLimit = m_Binding
rightLimit = docWidth – m_Target
End If

‘ 天(上)と地(下)のマージン設定
Dim topLimit As Double, bottomLimit As Double
topLimit = docHeight – m_Target
bottomLimit = m_Target

‘ — ガイド線の実配置(ガイドレイヤーに対して垂直・水平線を引く) —
‘ 垂直ガイド(左側)
Call guideLayer.CreateGuide(leftLimit, docHeight, leftLimit, 0)
‘ 垂直ガイド(右側)
Call guideLayer.CreateGuide(rightLimit, docHeight, rightLimit, 0)
‘ 水平ガイド(天)
Call guideLayer.CreateGuide(0, topLimit, docWidth, topLimit)
‘ 水平ガイド(地)
Call guideLayer.CreateGuide(0, bottomLimit, docWidth, bottomLimit)

Next p

‘ — 終了処理 —
Optimization = False
EventsEnabled = True
doc.EndCommandGroup

MsgBox “全ページのノド・小口ガイド線の配置が完了しました!”, vbInformation, “完了”
Exit Sub

ErrorHandler:
‘ エラー時のクリーンアップ(画面ロックの解除忘れを防ぐプロの技)
Optimization = False
EventsEnabled = True
doc.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub

—

コードの注目ポイント(ここが分かれば初心者卒業!)

1. `Optimization = True` による爆速化

CorelDRAW VBAで最もやってはいけないのが、「ページを切り替えるたびに画面を再描画させること」です。これをやると100ページある冊子では数分かかります。
冒頭で `Optimization = True`(最適化の有効化)を宣言し、処理が終わるまでCorelDRAWに「画面の書き換えをサボって計算に集中しろ」と命令することで、一瞬(コンマ数秒)で処理を終わらせます。このテクニックを知っているだけで、エンジニアとしての格が上がります。

2. 単位の壁を突破する `ConvertUnits`

CorelDRAWの内部計算は「ポイント」単位で行われます。しかし、人間は「ミリ(mm)」で考えたい生き物です。
`doc.ConvertUnits(targetMargin, cdrMillimeter, cdrPoint)` を使うことで、ユーザーが指定したミリメートルを、CorelDRAWが正確に解釈できるポイントへ自動変換しています。単位のズレによるバグを根絶する重要なポイントです。

3. `p.Index Mod 2` による見開き判定

「現在のページが偶数か奇数か」をプログラムで判定する王道の手法が、余剰を求める `Mod` 演算子です。
製本においては「偶数ページ(左側)は右がノド」「奇数ページ(右側)は左がノド」という絶対のルールがあります。この条件分岐を入れるだけで、プログラミングの恩恵を最大限に受けることができます。

—

陥りやすいエラーと回避のコツ

  • エラー:「オブジェクトが見つかりません」 (Error 91)
  • 原因: ドキュメントが開かれていない状態で実行したか、アクティブなページが存在しないときにおこります。コード冒頭の `If doc Is Nothing Then` でガードしていますが、レイヤー名「ガイド」が存在しない場合の処理も考慮しておくとより鉄壁になります(今回のコードでは `If guideLayer Is Nothing Then` で自動生成する安全設計にしています)。
  • ガイドがズレる・意図しない位置に配置される
  • 原因: CorelDRAWのページの原点(X=0, Y=0)の初期設定は、通常「左下」になっています(Adobe Illustratorなどは左上)。そのため、上下の計算(`docHeight – m_Target`)において、上方向がプラス、下方向がマイナス(Y座標の基準)になる点に注意してください。上記のコードはCorelDRAWの標準的な左下原点仕様に完全準拠しています。

—

先輩エンジニアからのエール

お疲れ様でした!このマクロをあなたのCorelDRAWに組み込めば、製本データのガイド線引きという単純作業から完全に解放されます。

「面倒な繰り返し作業はコードに代行させ、人間はクリエイティブなデザインに没頭する。」
これこそが、業務自動化エンジニアの本懐です。

ここをクリアしたあなたなら、ページ数に応じたマスターページの自動割当や、トンボを含めた面付け自動化へのステップもすぐ踏めるはずです。明日からのDTPライフを、もっとスマートに楽しみましょう!

タイトルとURLをコピーしました