【CorelDRAW VBA】見開き対応!奇数・偶数ページでガイド線を自動配置するプロの極意
こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成された無駄なコードを眺める段階はもう卒業しましょう。
今回は、DTP業務において最も頻出する「ノド(綴じ代)を考慮した左右見開きのガイド線配置」を自動化します。単にコードを動かすだけでなく、「なぜCorelDRAWのオブジェクトモデルはこうなっているのか」という本質を理解することで、明日からの自動化効率が劇的に変わります。
—
1. CorelDRAW VBAの「設計思想」を理解する
CorelDRAWのVBAで最も重要なのは、`ActiveDocument` からの階層構造です。
「ページ」の中に「レイヤー」があり、その中に「ガイド線(ガイドレイヤー)」が存在する。この構造を脳内に焼き付けてください。
特に注意すべきは、「ガイド線は専用のレイヤーに格納されている」という点です。これを理解していないと、ガイド線を配置しようとして図形オブジェクトを量産するミスを犯します。
—
2. 実践コード:見開き対応ガイド線自動配置スクリプト
このスクリプトは、現在のドキュメントの全ページを走査し、奇数ページ(右ページ)と偶数ページ(左ページ)を判別して、適切な位置にガイド線を引きます。
Sub AutoSetupGuidelinesForSpread()
Dim doc As Document
Dim p As Page
Dim guideLayer As Layer
Dim pageWidth As Double
Dim gutter As Double
‘ ノド(綴じ代)の設定:単位はデフォルト(mm等)に依存
gutter = 15
Set doc = ActiveDocument
‘ 処理速度向上のための最適化(画面更新を止める)
Optimization = True
For Each p In doc.Pages
p.Activate
‘ ガイド線専用レイヤーを取得(なければ作成)
Set guideLayer = p.GuidesLayer
‘ 既存のガイド線を全削除(クリーンな状態から配置)
guideLayer.Guides.All.Delete
pageWidth = p.SizeWidth
‘ ページ番号の偶奇判定
If p.Index Mod 2 <> 0 Then
‘ 奇数ページ:右ページ(ノドは左側)
guideLayer.CreateGuide gutter, 0, gutter, p.SizeHeight ‘ ノド側
guideLayer.CreateGuide pageWidth – 10, 0, pageWidth – 10, p.SizeHeight ‘ 外側
Else
‘ 偶数ページ:左ページ(ノドは右側)
guideLayer.CreateGuide pageWidth – gutter, 0, pageWidth – gutter, p.SizeHeight ‘ ノド側
guideLayer.CreateGuide 10, 0, 10, p.SizeHeight ‘ 外側
End If
Next p
‘ 最適化解除
Optimization = False
doc.ActiveWindow.Refresh
MsgBox “ガイド線の配置が完了しました!”, vbInformation
End Sub
—
3. コードの「ここがポイント!」〜先輩エンジニアの視点〜
① `Optimization = True` の魔力
CorelDRAW VBAにおいて、ループ処理中に画面を再描画させると、処理が数倍〜数十倍遅くなります。これを書くか書かないかで、100ページあるドキュメントの処理時間が数秒で終わるか、数十秒かかるかが決まります。
② `p.Index Mod 2` による偶奇判定
プログラミングの基本ですが、`Mod`(剰余演算子)を使うことで「2で割った余り」を見ています。0か1かでページの種類を判定する。これだけでDTPの複雑なレイアウト要件が魔法のように解決します。
③ `GuidesLayer` への直接アクセス
`ActiveLayer` を使ってガイドを配置しようとしてはいけません。ガイド専用のレイヤーオブジェクトを明示的に指定することで、予期せぬ誤操作や、ガイド線が動いてしまう事故を未然に防ぎます。
—
4. 陥りやすい罠と対策
- 単位の問題: マクロを実行する前に、ドキュメントの単位が「mm」なのか「pt」なのかを確認してください。`p.SizeWidth` は内部的には常にセンチメートル単位で計算されることが多いです。もしズレを感じたら、`doc.Unit` で調整する癖をつけましょう。
- レイヤーのロック: ガイド線レイヤーがロックされていると、スクリプトがエラーを吐きます。スクリプト内で `guideLayer.Locked = False` を記述しておくと、より堅牢になります。
—
最後に:自動化は「思考の余白」を作るためにある
自動化は単に「作業を早くする」ためのものではありません。
「面倒な繰り返しの修正から解放され、デザインそのものに集中する時間を作る」ためのものです。
今回紹介したコードは、あくまで「型」です。ここから「ヘッダー位置をずらしたい」「トンボを自動で入れたい」といった要望に合わせて、自由にカスタマイズしてください。
何か不明点があれば、またいつでも聞いてください。あなたの自動化の旅を、全力で応援しています。
