こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、コードの意味がさっぱりわからない……」というフェーズを卒業し、いよいよ自分の手でデザインを自在にコントロールしたい中級者のあなたへ。
今回は、パッケージデザインや看板制作の現場で毎日のように発生する「デザイン要素の増減に合わせて、ドキュメントの天地左右のサイズを自動追従させ、さらにセンタリング配置まで一発で完了させるレイアウト自動化マクロ」の極意を伝授します。
ここをクリアすれば、CorelDRAW VBAのドキュメント構造と座標系の本質が手に取るようにわかるようになりますよ。しっかりついてきてくださいね!
—
なぜ「自動リサイズ&センタリング」が必要なのか?
実務でこんな面倒な作業に直面したことはありませんか?
「クライアントの修正指示で、パッケージの文字数が減った(または増えた)。それに合わせてアートボード(ページサイズ)の寸法を詰め、中のデザインが中心からズレないように再配置し直す……」
これを手作業でやると、寸法計算を間違えたり、微調整で時間を奪われたりします。
CorelDRAW VBAを使えば、「現在の全オブジェクトの外接矩形(バウンディングボックス)を瞬時に計算し、余白(マージン)を考慮した上でページサイズを自動変形し、さらに全体の重心をキャンバスの真ん中にピタッと合わせる」ことが一瞬で終わります。
—
押さえておくべきCorelDRAW VBAの3つの重要概念
コードを書く前に、CorelDRAWのオブジェクトモデルにおける重要な「お作法」を3つだけ頭に入れておきましょう。
1. ActivePage(アクティブページ)の寸法変更
CorelDRAWのページサイズは、`ActivePage.SetSize(Width, Height)` でプログラムから自在に変更できます。
2. BoundingBox(外接矩形)の取得
選択された複数のオブジェクトが「どこからどこまでを占めているか」は、`ActiveDocument.Selection.GetBoundingBox` メソッドで一発取得できます。
3. 単位の罠(ドキュメント単位)
CorelDRAW VBAは、基本的に「現在のドキュメントの単位(mmやインチなど)」をそのまま数値として受け取ります。そのため、計算時は単位のズレに注意する必要があります。
—
実装コード:レイアウト自動追従マクロ
それでは、開発現場でそのままコピペして使える実用コードを公開します。
VBAエディタ(`Alt + F11`)を開き、標準モジュールに以下のコードを貼り付けてください。
Sub AutoFitPageToContentWithMargin()
‘ — 宣言セクション —
Dim s As ShapeRange
Dim leftX As Double, topY As Double, widthW As Double, heightH As Double
Dim margin As Double
Dim newWidth As Double, newHeight As Double
Dim pageCenterX As Double, pageCenterY As Double
Dim contentCenterX As Double, contentcenterY As Double
Dim deltaX As Double, deltaY As Double
‘ エラーハンドリングの基本
On Error GoTo ErrorHandler
‘ 1. 余白の設定(単位:ミリメートル ※ドキュメント設定に依存)
margin = 10# ‘ 周囲に10mmの余白を設ける
‘ 2. アクティブドキュメントの選択状態をチェック
If ActiveDocument.Selection.Count = 0 Then
MsgBox “サイズ変更の基準となるオブジェクトが選択されていません。”, vbExclamation, “レイアウト自動化”
Exit Sub
End If
‘ 3. 選択されている全オブジェクトの外接矩形(バウンディングボックス)を取得
‘ 引数に変数を入れることで、Left, Top, Width, Heightが同時に格納されます
Set s = ActiveDocument.Selection.Shapes
s.GetBoundingBox leftX, topY, widthW, heightH
‘ 4. 余白を含めた新しいページサイズの算出
newWidth = widthW + (margin 2)
newHeight = heightH + (margin 2)
‘ 5. ページのサイズ変更(基点は通常、左下または中心。今回は左下を基準に拡張)
‘ ※CorelDRAWのY座標は下から上に向かってプラスになる点に注意!
ActivePage.SetSize newWidth, newHeight
‘ 6. 新しいページの中心座標を算出
pageCenterX = newWidth / 2
pageCenterY = newHeight / 2
‘ 7. 現在のコンテンツ群の中心座標を算出
contentCenterX = leftX + (widthW / 2)
contentcenterY = topY + (heightH / 2)
‘ 8. ページ中心に合わせるための移動量を計算
deltaX = pageCenterX – contentCenterX
deltaY = pageCenterY – contentcenterY
‘ 9. オセロの石を動かすように、全選択オブジェクトを一括シフト
If deltaX <> 0 Or deltaY <> 0 Then
s.Move deltaX, deltaY
End If
‘ 10. 完了メッセージ
MsgBox “ページサイズの自動調整とセンタリングが完了しました!”, vbInformation, “処理成功”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
—
コードのここがポイント!プロの技術解説
1. `GetBoundingBox` の強力さと注意点
コードの第3ステップで使用している `GetBoundingBox` は、選択されたオブジェクト群の「一番左、一番上、全体の幅、全体の高さ」を瞬時に割り出す神メソッドです。
ここで重要なのは、CorelDRAWの座標系は「左下原点(左下が X=0, Y=0)」であるという点。Web制作(ブラウザの上から下へ進む座標系)に慣れていると、`topY` の扱いで混乱しがちですが、CorelDRAWでは「上方向がYのプラス方向」になるため、オブジェクト全体のバウンディングボックスの計算はすべてAPI側が綺麗に処理してくれます。
2. まとめて動かす `s.Move` のパフォーマンス
個々のオブジェクトをループ(For Each)させて1つずつ移動させると、画面の再描画(フリッカー)が発生し、処理が重くなります。
しかし、上記コードでは `ShapeRange` オブジェクト(変数 `s`)に対して直接 `s.Move deltaX, deltaY` を実行しているため、グループ化を解除することなく、選択されているオブジェクト群を一撃で平行移動させることができます。これが実務で耐えうる高速化の極意です。
—
陥りやすいエラーと回避のコツ
1. 「オブジェクトが選択されていません」と怒られる
- 原因: マクロを実行する時に、アートボード上のオブジェクトを何も選択していない状態。
- 対策: コード内の `ActiveDocument.Selection.Count = 0` のガード節で弾いています。必ず対象を選んでから実行しましょう。
2. 単位がミリではなくインチになってしまう
- 原因: CorelDRAWのドキュメント自体の初期単位設定が影響しています。
- 対策: マクロ内で数値を扱う際は、現在開いているドキュメントのルーラー単位(Document.Ruler单位)に依存するため、デザイン制作を始める前にドキュメントの単位を「mm」に固定する習慣をつけましょう。
—
まとめ
いかがでしたでしょうか?
今回は、デザイン要素の変化に追従してページサイズを自動変更し、美しくセンタリング配置するマクロを通じて、CorelDRAW VBAの座標計算とオブジェクト操作の本質に迫りました。
ここをクリアできれば、次は「特定のレイヤー名だけを自動吸い上げしてPDF書き出しを行う」「CSVからデータを流し込んで看板を何枚も自動生成する」といった、さらなる高みへの扉が開きます。
日々の退屈な手作業はマクロに任せて、あなたしか生み出せないクリエイティブな時間に没頭してください。それでは、次回の極意でお会いしましょう!
