CorelDRAW VBAを掌握する:Shapeオブジェクトの「位置とサイズ」を自由自在に操る極意
こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で意味不明なコードを見て絶望したことはありませんか?大丈夫です。あのコードは「動く」だけで「制御」はできていません。
今日から、あなたは単なる記録者ではなく、CorelDRAWを掌の上で転がすエンジニアになります。まずは、すべての基本である「Shapeオブジェクトの位置とサイズ」を、プロの作法で制御する方法を学びましょう。
—
1. 座標系の「基準点」を理解する:ここが最初の関門
CorelDRAWのVBAで最も初心者が躓くのが「座標の基準」です。
`Left`, `Top`, `Width`, `Height` を操作する際、「図形のどこを起点に計算しているのか?」を理解しないと、図形は意図しない場所へ飛んでいきます。
- Left / Top: バウンディングボックスの「左端」と「上端」の値です。
- Width / Height: 図形そのもののサイズです。
重要なのは、「座標の基準は、図形の左上角」だということです。これさえ覚えておけば、複雑なレイアウト計算も怖くありません。
—
2. 実践:図形を意図通りに配置するコード
まずは、現在選択している図形を、指定した座標(X=50mm, Y=100mm)に移動させ、サイズを正方形(50mm x 50mm)に変更するコードを書いてみましょう。
プロフェッショナルなコード例
Sub ResizeAndMoveShape()
‘ 選択している図形がない場合はエラーになるため、ガード節を入れるのが作法
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “対象となる図形を選択してください。”, vbExclamation
Exit Sub
End If
‘ CorelDRAWのVBAでは、単位の指定が重要です。
‘ 今回はmm単位で統一して計算します。
Dim s As Shape
Set s = ActiveShape
‘ 単位をmmに設定(環境設定に依存しないための防御策)
ActiveDocument.Unit = cdrMillimeter
‘ プロパティへの直接代入(これが最も高速で標準的な書き方です)
With s
.LeftX = 50 ‘ 左端を50mmの位置へ
.TopY = 100 ‘ 上端を100mmの位置へ
.SizeWidth = 50 ‘ 幅を50mmに
.SizeHeight = 50 ‘ 高さを50mmに
End With
‘ 最後に再描画を強制して処理を確定させる(重い処理の時は必須)
ActiveWindow.Refresh
End Sub
コードの解説
- `ActiveShape`: 選択中の図形を1つだけ取得するプロパティです。複数選択されている場合は「最後に選択したもの」を指します。
- `With`句: プロパティを何度も設定する場合、`s.`を繰り返すのはタイピングの無駄であり、可読性を下げます。`With`で囲むのがスマートな書き方です。
- `Unit`の指定: ユーザーのドキュメント設定が「インチ」かもしれないという想定を怠ってはいけません。明示的に`cdrMillimeter`を指定することで、計算の狂いを防ぎます。
—
3. 陥りやすい「3つの罠」
初心者がよくやる失敗を先回りして教えます。これを知っておくだけで、開発スピードが3倍になります。
1. 「単位」の不一致:
コード内で数値を指定する際、単位設定を忘れると、予期せぬ巨大な図形になったり、画面外に消えたりします。常に単位を意識しましょう。
2. 「グループ化」の罠:
グループ化された図形を操作する場合、`Left`や`Top`は「グループ全体のバウンディングボックス」を指します。個別のパーツを動かしたい場合は、一度グループを解除するか、`Shapes.FindShapes`などで階層を辿る必要があります。
3. 「座標の向き」の勘違い:
CorelDRAWの座標系は、上がプラス、下がマイナスです(ページ下部が0,0の原点)。Webデザイン(上から下にプラス)とは逆ですので、頭を切り替えてくださいね。
—
4. さあ、次のステップへ
今回のコードは、CorelDRAW自動化の「第一歩」に過ぎません。
ここをマスターすれば、次は「複数の図形を整列させる」「指定したルールで自動配置する」「CSVから名刺を一括作成する」といった、真の自動化へと進むことができます。
「プログラムは、動くものを作るのではなく、制御できるものを作る」
この意識を持つだけで、あなたの書くコードの質は劇的に変わります。まずはこのコードをコピーして、自分の環境で動かしてみてください。図形がピタッと指定した場所に飛んだとき、きっと自動化の快感を感じるはずです。
何か分からないことがあれば、いつでも聞いてください。壁を越えるまで、私はここで待っていますよ。
