CorelDRAW VBAを掌握せよ:ActiveSelectionRangeで実現する「神速」一括整列・リサイズ術
こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成された無機質なコードを眺めて溜息をついたことはありませんか?そのコードは、あなたの意図を汲み取っているようで、実はCorelDRAWの内部エンジンにとって非常に非効率な「遠回り」をさせていることが多いのです。
今日は、CorelDRAW自動化の第一歩であり、かつ実務で最も恩恵を受ける「ActiveSelectionRange」をマスターしましょう。これさえ理解すれば、手作業で数分かかっていた整列作業が、瞬きする間に終わるようになります。
—
1. なぜ「SelectionRange」なのか?
CorelDRAWのオブジェクトモデルにおいて、ユーザーが選択している状態を扱うのが `ActiveSelectionRange` です。
初心者が陥りがちな罠は、個別のオブジェクトを一つずつループで処理しようとすることです。しかし、`SelectionRange` を使えば、「選択されている集合体そのもの」に対して、整列やリサイズという命令を一括で投げることができます。
これが、高速かつ安定した自動化の鍵です。
—
2. 実践コード:一括整列とリサイズ
では、実際に「選択したオブジェクトをすべて同じサイズにし、左上に整列させる」というマクロを見てみましょう。
Sub BatchAlignAndResize()
‘ 最適化:描画を一時停止して処理速度を劇的に向上させる
Optimization = True
Dim sr As ShapeRange
Set sr = ActiveSelectionRange
‘ 選択物がゼロなら終了(エラー回避の鉄則)
If sr.Count = 0 Then
MsgBox “オブジェクトを選択してください!”, vbExclamation
Optimization = False
Exit Sub
End If
‘ 一括処理の開始
Dim s As Shape
Dim targetWidth As Double
Dim targetHeight As Double
‘ 基準として最初のオブジェクトのサイズを取得
targetWidth = 50 ‘ mm単位
targetHeight = 30 ‘ mm単位
‘ 範囲内の全オブジェクトをループ
For Each s In sr
s.SizeWidth = targetWidth
s.SizeHeight = targetHeight
Next s
‘ 整列:ActiveSelectionRangeを使うと、指定した位置へ一気に配置可能
‘ ここではページ左上(0,0)を基準に整列させる例
sr.AlignToPoint cdrAlignHCenter + cdrAlignVCenter, 0, 0
‘ 描画の再開
Optimization = False
ActiveWindow.Refresh
End Sub
—
3. コードの「魂」を読み解く:3つの重要ポイント
このコードには、現場で生き残るための「エンジニアの作法」が詰め込まれています。
① `Optimization = True` の魔力
`Optimization` を `True` にすると、CorelDRAWの画面再描画が停止します。これを行わないと、オブジェクトが動くたびに画面が更新され、PCの負荷が跳ね上がります。数百のオブジェクトを扱うなら、この一手間が数秒の短縮に直結します。
② エラー回避(ガード節)
`If sr.Count = 0` のチェックを忘れてはいけません。何も選択していない状態でマクロを走らせると、VBAは容赦なくエラーを吐いて停止します。ユーザーに対する優しさは、こうした「事前の確認」から生まれます。
③ `ShapeRange` の柔軟性
`sr.AlignToPoint` は、個々の図形を計算するのではなく、「選択範囲全体」を一つの塊として整列させます。この「集合体としての操作」こそが、CorelDRAW APIの真骨頂です。
—
4. 陥りやすい罠と対策
現場でよくある失敗例を挙げておきます。
- 単位の罠: CorelDRAWのAPIは基本的に「インチ」で計算されることが多いです。もし定規の設定がミリメートルであっても、内部的にはインチで処理される場合があります。`ActiveDocument.Unit` を意識するか、数値に単位を明示的に変換する癖をつけましょう。
- グループ化の罠: 選択範囲の中に「グループ化されたオブジェクト」が含まれている場合、サイズ変更が意図しない挙動になることがあります。必要に応じて `sr.UngroupAll` を挟むなどの工夫が必要です。
—
さあ、次のステップへ
今回のコードは、あなたの自動化ライフの出発点です。
ここをクリアしたあなたは、もう「マクロの記録」に頼るだけの初心者ではありません。
次は、「レイヤーごとに処理を分ける」ことや、「特定の名前がついた図形だけを抽出する」というテクニックに挑戦してみましょう。CorelDRAWは、あなたの命令を心待ちにしている素晴らしい相棒です。
分からないことがあれば、いつでもまた聞きに来てください。あなたのコードが、現場をよりクリエイティブな場所へ変えていくことを確信しています。頑張ってくださいね!
