CorelDRAW VBAを掌握せよ:ページサイズ変更とオブジェクト自動整列の自動化術
こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で修正の効かないコードに絶望したことはありませんか?
CorelDRAW VBAは、正しく扱えば「何千枚ものデザインを一瞬で整える」最強の武器になります。今回は、実務で最も要望が多い「ページサイズの動的変更」と「内部オブジェクトの自動センタリング」を題材に、オブジェクトモデルの真髄を伝授します。
—
1. CorelDRAWのオブジェクトモデルを俯瞰する
コードを書く前に、CorelDRAWという「広大な宇宙」の地図を頭に入れましょう。
- Application: すべての頂点。CorelDRAWそのもの。
- Document: 現在開いているキャンバス。
- Page: ドキュメント内の個別のページ。
- Layer: ページ内の階層。
- Shape: 皆さんが普段触っている図形そのもの。
VBAを使いこなすコツは、「今、誰を操作しているのか」を常に意識することです。今回は `ActiveDocument.ActivePage` を中心に操作していきます。
—
2. 【実践】ページサイズ変更&オブジェクト調整スクリプト
以下のコードは、現在のページサイズを任意の数値に変更し、ページ内に存在する全オブジェクトを新しいサイズに合わせてセンタリング・リサイズするものです。
Sub AdjustPageAndCenterObjects()
‘ — 設定値 —
Dim newWidth As Double, newHeight As Double
newWidth = 210 ‘ mm単位
newHeight = 297 ‘ mm単位
‘ オブジェクトモデルの取得
Dim doc As Document
Dim pg As Page
Dim sr As ShapeRange
Set doc = ActiveDocument
Set pg = doc.ActivePage
‘ 単位をミリメートルに固定(重要:環境依存を防ぐため)
doc.Unit = cdrMillimeter
‘ 1. ページサイズを変更
pg.SetSize newWidth, newHeight
‘ 2. ページ内の全オブジェクトを取得
‘ Layer.Shapesはページ上の全シェイプへのアクセスポイント
Set sr = pg.Layers.AllShapes
‘ 3. オブジェクトをセンタリング
‘ Groupして動かすのが最も安全かつ高速です
Dim grp As Shape
If sr.Count > 0 Then
Set grp = sr.Group()
‘ ページの中心座標(X, Y)へ移動
grp.CenterX = newWidth / 2
grp.CenterY = newHeight / 2
‘ グループを解除して元に戻す
grp.Ungroup
End If
MsgBox “ページ調整が完了しました!”, vbInformation
End Sub
—
3. ここで差がつく!プロの視点(注意点とヒント)
① 「単位」の罠を回避せよ
初心者が最も陥る罠が「単位」です。ユーザーがドキュメントをインチ設定にしているのか、ミリ設定にしているのかでコードの挙動が変わります。
必ず `doc.Unit = cdrMillimeter` のように、実行前に単位を明示的に指定する癖をつけてください。これだけでバグの9割が消えます。
② ShapeRangeの扱い方
`ActivePage.Layers.AllShapes` は、ページ上のすべてのオブジェクトを含む「ShapeRange」を返します。これに対し、いきなり位置変更の指示を出すと個別に動いてしまいます。
「一度グループ化してから移動し、最後に解除する」。これが、オブジェクトの相対位置関係を崩さずに一括処理する、最もエレガントで高速なアルゴリズムです。
③ エラー処理の重要性
もしページにオブジェクトが一つもなかったら? `sr.Count > 0` というチェックがないと、エラーが発生してスクリプトが停止します。「オブジェクトがある場合のみ実行する」というガード節を書くことは、プロフェッショナルの嗜みです。
—
まとめ:ここをクリアすれば、あなたはもう初心者ではない
今回紹介した「ページサイズの変更」と「オブジェクトのグループ操作」は、CorelDRAW自動化の基礎体力を鍛える最高の演習です。
1. オブジェクトモデル(階層構造)を理解する
2. 実行環境(単位)を固定する
3. ShapeRangeをグループ化で制御する
これらを押さえるだけで、あなたの作業効率は劇的に向上します。最初は難しく感じるかもしれませんが、VBAは「自分の右腕」を育てるようなもの。少しずつコードを書き換え、自分好みのツールに育て上げていってください。
もし、さらに高度な「特定のレイヤーだけを対象にしたい」「PDF書き出しまで自動化したい」という欲が出てきたら、その時こそ次のステージへ進む合図です。
応援しています。また次のステップでお会いしましょう!
