こんにちは!CorelDRAW VBAの世界へようこそ。
看板製作やパッケージデザインの現場では、「クライアントの要望で急遽サイズが変更になった!」なんてトラブル(いや、日常茶飯事ですね)が本当によく起きます。
メインビジュアルの寸法が変わるたびに、背景の塗り足し枠を広げ、ガイドラインを直し、アートボード(ページサイズ)を再設定する……。そんな手作業、もう終わりにしましょう。
今回は、「デザイン要素の変更に合わせて、ドキュメントの天地左右のサイズを自動追従させるレイアウト調整マクロ」を、プロのエンジニアの知見を交えて徹底解説します。
ここをクリアすれば、マクロの記録から完全に脱却し、CorelDRAWを意のままに操るエンジニアの仲間入りです。一緒にバッチリマスターしていきましょう!
—
1. なぜ「マクロの記録」だけでは実務を突破できないのか?
CorelDRAWの「マクロの記録」は便利ですが、生成されるコードは「今クリックした絶対座標」を記憶しているだけです。
例えば、「A4サイズから特注の変形看板サイズへ変更する」といった動的な処理では、絶対座標ベースのコードは全く役に立ちません。
実務で求められるのは、「選択したオブジェクト、あるいは特定のレイヤーを基準にして、ドキュメント自体のサイズを計算し、周囲の背景やガイドを連動して再構築する」という、いわば“意思を持ったコード”です。
まずは、CorelDRAW VBAにおける座標系とドキュメントサイズの基本概念をしっかり押さえましょう。
—
2. コア概念:ページの起点はどこにある?
CorelDRAWのVBAでは、デフォルトでページの左下が座標の基準(X=0, Y=0)になっています。(※バージョンや設定によっては変更可能ですが、基本は左下です)
オブジェクトの寸法や中心位置を動かすとき、この「基準」を意識することが極限のパフォーマンスとバグのないコードを生むカギになります。
- `ActiveDocument.Pages(1).SetSize Width, Height` : ページのサイズを直接変更するAPI
- `ActiveSelection` : 現在選択しているオブジェクト群
この2つを組み合わせることで、「メインビジュアルのサイズが変わった = ページのサイズをそれに合わせる = 背景枠をページの中心に再配置する」という自動化ロジックが完成します。
—
3. 実装コード:サイズ自動追従エンジン
それでは、現場でそのままコピペして使える実用スクリプトを公開します。
このコードは、「画面上でサイズ変更したメインビジュアル(または特定のIDを持つグループ)を選択した状態で実行すると、周囲の背景枠とページサイズが余白込みで自動追従する」という優れものです。
Sub AutoFitLayoutToDesign()
‘ エラーハンドリングの基本:トラブル時に処理を止めず安全に抜ける
On Error GoTo ErrorHandler
Dim sr As ShapeRange
Set sr = ActiveSelectionRange
‘ 1. オブジェクトが選択されているかチェック
If sr.Count = 0 Then
MsgBox “サイズ基準となるオブジェクトを選択してください。”, vbExclamation, “レイアウト自動化”
Exit Sub
End If
‘ トランザクションの開始(Ctrl+Zで一括Undoできるようにするプロの技)
ActiveDocument.BeginCommandGroup “レイアウト自動追従”
‘ 2. 選択オブジェクトのバウンディングボックス(外接矩形)を取得
Dim objLeft As Double, objTop As Double, objWidth As Double, objHeight As Double
sr.GetBoundingBox objLeft, objTop, objWidth, objHeight
‘ 【実務的工夫】周囲に持たせたい余白(マージン)の設定:例として上下左右に各 50mm の余白を追加
‘ ※CorelDRAWの内部単位はデフォルトで「インチ」等の場合があるため、明示的にミリメートルに換算します
Dim margin As Double
margin = ActiveDocument.ConvertUnits(50, cdrMillimeter, ActiveDocument.Unit)
‘ 新しいページサイズの計算
Dim newWidth As Double, newHeight As Double
newWidth = objWidth + (margin 2)
newHeight = objHeight + (margin 2)
‘ 3. ドキュメント(アクティブページ)のサイズを変更
ActiveDocument.Pages(1).SetSize newWidth, newHeight
‘ 4. 背景レイヤーにある「背景枠(Background Rect)」を自動リサイズしてセンタリング
‘ ※あらかじめ背景オブジェクトに “BgRect” という名前をつけておくのが実務の定石です
Dim bgShape As Shape
On Error Resume Next
Set bgShape = ActivePage.FindShape(“BgRect”)
On Error GoTo ErrorHandler ‘ エラー監視を戻す
If Not bgShape Is Nothing Then
‘ 背景枠のサイズを新ページサイズに合わせる
bgShape.SizeW = newWidth
bgShape.SizeH = newHeight
‘ ページ中央(新ページの中心座標)に配置
bgShape.CenterX = newWidth / 2
bgShape.CenterY = newHeight / 2
End If
‘ トランザクションの終了
ActiveDocument.EndCommandGroup
‘ 完了メッセージ
MsgBox “レイアウトの自動追従が完了しました!” & vbCrLf & _
“新サイズ: ” & Round(ActiveDocument.ConvertUnits(newWidth, ActiveDocument.Unit, cdrMillimeter), 1) & “mm × ” & _
Round(ActiveDocument.ConvertUnits(newHeight, ActiveDocument.Unit, cdrMillimeter), 1) & “mm”, _
vbInformation, “処理成功”
レ
ExitSub:
Exit Sub
ErrorHandler:
ActiveDocument.EndCommandGroup
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
Resume ExitSub
End Sub
—
4. コードの深掘り解説:ここがプロのポイント
初心者から一歩抜け出すために、上記のコードで使われている「重要なテクニック」を3つ解説します。
① `BeginCommandGroup` によるUndoの保証
業務自動化で一番恐ろしいのは、マクロを実行したせいで「Ctrl+Zが効かなくなり、レイアウトが崩壊して元に戻せない」という悲劇です。
`ActiveDocument.BeginCommandGroup` と `EndCommandGroup` で処理を挟むと、マクロ内の複数の変更が一つの「アンドゥ(元に戻す)単位」としてグループ化されます。これは実務では必須の作法です。
② 単位の罠を回避する `ConvertUnits`
CorelDRAWは、ドキュメントの設定によって内部単位(インチ、センチ、ミリ、ピクセルなど)が異なります。
コード内で直接 `50` などの数値を足してしまうと、ドキュメント単位がインチのときに「50インチ(巨大なサイズ!)」になってしまいます。
`ActiveDocument.ConvertUnits` を使うことで、環境に依存しない堅牢なコードになります。
③ オブジェクト名(`FindShape`)による確実なターゲット指定
「どれが背景枠で、どれがメインビジュアルか」をVBAに判断させるために、オブジェクト名(オブジェクトマネージャーで確認できる名前)を活用します。
今回は背景に `”BgRect”` という名前を付けておくことで、レイアウトがどう変形しても、プログラムが迷わず一発で背景を特定してリサイズできるようにしています。
—
5. 陥りやすいエラーと回避のコツ
- エラー:「オブジェクトが見つかりません」 (Error 91)
- 原因:背景枠に `”BgRect”` という名前がついていない状態でコードが走ると発生します。
- 対策:コード内の `On Error Resume Next` のように、対象が存在しなくても全体がクラッシュしない「防御的プログラミング」を心がけましょう。
- サイズが意図したより小さくなる / 大きくなる
- 原因:ページの原点位置や、オブジェクトの基準点(バウンディングボックスのアンカー)の誤解。
- 対策:まずはシンプルな矩形を1つだけ配置したテスト用ドキュメントで、デバッグモード(F8でステップ実行)を使い、変数の値が意図通りか確認しながら進めましょう。
—
おわりに
いかがでしたでしょうか?
今回紹介したような「デザインの変更に連動してドキュメントや周辺要素が自動追従する仕組み」を構築できれば、変形サイズが頻発する案件の作業時間は従来の1/10以下になります。
「ここをこう変えたら、もっと色々なサイズの看板に対応できるな」というアイデアが湧いてきたら、あなたもう立派なCorelDRAW自動化エンジニアです。
日々の退屈な手作業をコードで駆逐し、本当にクリエイティブなデザインワークに集中する時間を手に入れましょう。それでは、次回の極限の知見でお会いしましょう!
