こんにちは!CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身がよくわからない…」という状態から一歩抜け出し、自分の手でデザインを自在にコントロールしたいあなたへ。
今回は、CorelDRAW VBAの真髄である「オブジェクトの座標直接操作」をマスターするための超実用的なテクニックを授けましょう。
ここをクリアすれば、手動での微調整という終わりのない地獄から解放され、CorelDRAW VBAの基本はバッチリです。優しく、そして本質的なところまでしっかりと解説していきますね。
—
なぜ「マクロの記録」だけでは実務で使えないのか?
CorelDRAWには便利な「マクロの記録」機能がありますが、これで図形の整列を記録すると、画面上の「今のマウス位置」や「選んだ順番」に強く依存した、融通の利かないコードが生成されてしまいます。
プロのエンジニアが書くマクロは違います。
「今、画面上で何が選ばれているか(Selection)」を瞬時に把握し、その図形の「境界線(バウンディングボックス)」の座標を数学的に計算して一発で配置する――これが、美しく堅牢な自動化の基本です。
今回は、「選択した複数のベクター図形を、基準となる図形の左端(または上端)にワンクリックでピタッと揃える」という実用的なマクロを作ってみましょう。
—
座標操作の核心:バウンディングボックスの概念
CorelDRAWのすべてのオブジェクトには、その図形を囲う四角い枠、「バウンディングボックス」が存在します。VBAでは、この枠の端っこ(Left, Right, Top, Bottom)の座標を直接読み書きできます。
[Top]
┌─────────────┐
[Left] Object [Right]
└─────────────┘
[Bottom]
今回のマクロでは、「最初に選択した図形」を不動の親(基準)とし、「後から選択した図形たち」をその親の座標にスナップ(整列)させるロジックを組みます。
—
実践!ワンクリック整列マクロのコード
以下のコードをCorelDRAWのVBAエディタ(`Alt + F11`で起動)の標準モジュールに貼り付けてください。
Sub SnapToFirstObject()
‘ —————————————————-
‘ 選択した図形を最初の図形に左揃えでスナップするマクロ
‘ —————————————————-
‘ エラーハンドリングの基本:選択図形が足りない時の対策
If ActiveSelection.Shapes.Count < 2 Then
MsgBox "整列させるには、2つ以上の図形を選択してください。", vbExclamation, "CorelDRAW VBA"
Exit Sub
End If
' 画面のチラつきと再描画を抑止してパフォーマンスを爆上げする作法
EventsEnabled = False
ActiveDocument.BeginCommandGroup "左端揃えスナップ"
On Error GoTo ErrorHandler ' 万が一のエラー時に処理がフリーズするのを防ぐ
' 1. 基準となるオブジェクト(最初期に選択された図形)の左端座標を取得
Dim refShape As Shape
Set refShape = ActiveSelection.Shapes(1)
Dim targetLeft As Double
targetLeft = refShape.LeftX ' 基準の左端X座標
' 2. 2番目以降のオブジェクトをループ処理し、基準の左端に強制移動
Dim i As Long
Dim currentShape As Shape
For i = 2 To ActiveSelection.Shapes.Count
Set currentShape = ActiveSelection.Shapes(i)
' X座標(LeftX)を基準オブジェクトの左端に合わせる
currentShape.LeftX = targetLeft
Next i
' 処理の完了
ActiveDocument.EndCommandGroup
EventsEnabled = True
MsgBox "整列が完了しました!", vbInformation, "完了"
Exit Sub
ErrorHandler:
' エラーが発生した場合は安全に画面更新を復旧させる
ActiveDocument.EndCommandGroup
EventsEnabled = True
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
End Sub
---
コードの注目ポイント(エンジニアの知見)
初心者の方が「おっ」と思うべきポイント、そして実務で絶対に必要な作法を3つ解説します。
1. `EventsEnabled = False` による高速化
CorelDRAWは、オブジェクトを1つ動かすたびに画面を再描画しようとします。複数の図形を処理するときにこれをやると、画面がチラつき、処理速度がガクッと落ちます。処理の最初にこれを `False` にし、最後に `True` に戻すのがプロの技です。
2. `BeginCommandGroup` で「Ctrl + Z」を担保する
マクロで一括処理を行った後、「やっぱり元に戻したい!」と思うことはよくあります。このメソッドを挟んでおくと、マクロで行った数個〜数千個の移動処理が、「1回の元に戻す(Ctrl + Z)」にまとめられます。ユーザーフレンドリーなマクロには必須です。
3. オブジェクトのライフサイクルとインデックス
`ActiveSelection.Shapes(1)` は、「今選択されている中で1番目の図形」を指します。CorelDRAWのVBAでは、選択した順番がそのままインデックスの番号になります。つまり、「ユーザーが最初にクリックした図形を基準にする」という直感的な操作がそのままコードに落とし込めます。
—
陥りやすいエラーと対策
1. 「オブジェクトが見つかりません」エラーが出る
- 原因: 何も選択していない状態でマクロを実行したため。
- 対策: コードの最初にある `If ActiveSelection.Shapes.Count < 2 Then` のようなバリデーションチェック(事前確認)を必ず入れる癖をつけましょう。
2. 位置がズレる・予期せぬ場所に飛ぶ
- 原因: CorelDRAWの原点(座標系)の設定や、図形の「基準点(アンカーポイント)」が中心になっている場合などに発生します。
- 対策: 今回使用した `.LeftX` は、バウンディングボックスの左端を強制的に指定するため、図形の変形中心に惑わされず確実に左端を揃えることができます。
—
おわりに:ここから広がる自動化の世界
お疲れ様でした!これであなたは、画面上のマウス操作の呪縛から解放され、座標という「数学のキャンバス」でCorelDRAWを操る第一歩を踏み出しました。
今回は「左端揃え」でしたが、応用すれば `TopY`(上端揃え)、`CenterX`(中心揃え)、さらには等間隔に並べるロジックなども簡単に作れるようになります。
ここをクリアしたあなたなら、もう怖くありません。ぜひ自分のワークフローに合わせて、このコードを改造してみてくださいね。次回の応用編もお楽しみに!
