こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押すだけの操作から一歩踏み出し、自分の手でコードを書いてデザインをコントロールしたい――そう思われたなら、あなたはもう立派な自動化エンジニアの卵です。
今回は、CorelDRAW VBAの基本中の基本であり、実務でも必ずと言っていいほど使う「選択中のベクターオブジェクトのバウンディングボックス(外接矩形)座標を取得してログに出力する」方法を解説します。
ここをクリアすれば、CorelDRAW VBAのオブジェクト指向の考え方や、デバッグの基本が手に取るようにわかるようになりますよ。しっかりついてきてくださいね!
—
1. そもそも「バウンディングボックス」とは?
CorelDRAW上で何かベクターオブジェクトを一つ選ぶと、四隅と辺の中心に小さな四角いハンドル(ノード)が表示されますよね。あれを囲む見えない箱、それがバウンディングボックスです。
バウンディングボックスが教えてくれるのは、主に以下の4つの値です。
- Left(左端のX座標)
- Top(上端のY座標)
- Right(右端のX座標)
- Bottom(下端のY座標)
- おまけに Width(幅) と Height(高さ) もわかります!
この座標をプログラムから瞬時に読み取れるようになると、「指定サイズより大きいオブジェクトを検出して警告する」「複数のオブジェクトの正確な位置を解析する」といった高度な自動化への道が開けます。
—
2. 実際のコードを書いてみよう
まずは、百聞は一見にしかずです。以下のコードをCorelDRAWのVBAエディタ([Alt] + [F11]キーで起動)に貼り付けてみましょう。
Sub GetSelectedBoundingBox()
‘ 1. 何も選択されていない場合のガード処理
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “オブジェクトが選択されていません。”, vbExclamation, “エラー”
Exit Sub
End If
‘ 2. 現在選択されているオブジェクトを変数に格納
Dim sh As Shape
Set sh = ActiveSelection.Shapes(1)
‘ 3. バウンディングボックスの座標を取得して変数に代入
Dim cLeft As Double, cTop As Double, cRight As Double, cBottom As Double
cLeft = sh.LeftX
cTop = sh.TopY
cRight = sh.RightX
cBottom = sh.BottomY
‘ 4. イミディエイトウィンドウに出力(デバッグの基本!)
Debug.Print “=== 選択オブジェクトの座標情報 ===”
Debug.Print “Left (左端): ” & cLeft & ” mm”
Debug.Print “Top (上端): ” & cTop & ” mm”
Debug.Print “Right (右端): ” & cRight & ” mm”
Debug.Print “Bottom (下端): ” & cBottom & ” mm”
Debug.Print “Width (幅) : ” & sh.Width & ” mm”
Debug.Print “Height (高さ): ” & sh.Height & ” mm”
‘ 完了の合図
MsgBox “座標の取得に成功しました!イミディエイトウィンドウを確認してください。”, vbInformation, “完了”
End Sub
使い方の手順
1. CorelDRAWを開き、適当な図形(四角形や円など)を1つ描いて選択します。
2. `[Alt] + [F11]`を押してVBAエディタを開きます。
3. メニューの `[挿入]` > `[標準モジュール]` をクリックし、開いた白い画面に上記のコードを貼り付けます。
4. `[Ctrl] + [G]` キーを押してイミディエイトウィンドウを表示させておきます(ここがログの出力先になります)。
5. コードの中にカーソルを置いた状態で、上部メニューの `[実行]` > `[サブ/ユーザーフォームの実行]`(または `[F5]`キー)を押します。
うまく実行できると、画面に完了メッセージがポップアップし、裏のイミディエイトウィンドウにズラリと座標が出力されます!
—
3. コードの解説:ここがプロの勘所
たったこれだけの短いコードですが、CorelDRAW VBAを使いこなすためのエッセンスがぎっしり詰まっています。重要なポイントを3つに絞って解説しますね。
① 「何もない状態」を恐れない(ガード処理)
If ActiveSelection.Shapes.Count = 0 Then …
プログラミング初心者がやりがちな失敗の1つが、「何も選択されていない状態でプログラムを動かしてエラー(実行時エラー)になる」ことです。
`ActiveSelection.Shapes.Count`(選択されているシェイプの数)が0のときは、処理を進めずに優しくユーザーに教えてあげる。こういう「守りのコード(ガードル)」を入れるのが、優れたエンジニアの第一歩です。
② `ActiveSelection` と `Shape` の関係
CorelDRAWでは、今ユーザーが画面上で選んでいるものを `ActiveSelection` と呼びます。
複数のオブジェクトを囲んで選ぶこともあるため、`ActiveSelection.Shapes(1)` と書くことで、「選択されているグループの中の1番目のシェイプ」を指定しています。
③ デバッグの最強ツール `Debug.Print`
画面に「ポップアップメッセージ(MsgBox)」を出すのも良いですが、大量のデータを一度に確認したり、後からログを見返したりするには不向きです。
`Debug.Print` を使えば、VBAエディタの下部にあるイミディエイトウィンドウに、処理を止めることなく文字や数字の記録(ログ)を流し込むことができます。実務での開発では、画面よりもこっちのほうを圧倒的によく使います。
—
4. 初心者がハマりがちな「落とし穴」
ここで、CorelDRAW VBA特有の「おや?」と思うポイントを先回りして解説しておきます。
- 単位はドキュメント設定に依存する
コードで取得した数値(例: `100` など)は、今開いているCorelDRAWのドキュメントの単位(ミリメートル、インチ、ピクセルなど)がそのまま適用されます。「あれ、数字が大きすぎる/小さすぎる?」と思ったときは、ドキュメントの単位設定を確認してください。
- Y軸の向きに注意!
数学のグラフと違い、CorelDRAW(多くのDTPソフト)は「画面の左下、あるいは左上」を基準に座標を測ります。特に`TopY`はページの上端からの距離になるため、画面の上に行くほど値が大きくなる点だけ、最初は少し戸惑うかもしれません。
—
おわりに
お疲れ様でした!
今回は「選択中のオブジェクトのバウンディングボックスを取得してログに出力する」という基本中の基本をマスターしました。
「たったこれだけ?」と思われるかもしれませんが、「画面上のオブジェクトを捕まえて、そのプロパティ(位置やサイズ)を読み取る」という一連の流れは、これからあなたがどんなに複雑な自動化ツールを作る時でも、必ずベースとなる最重要の基本動作です。
ここをクリアしたあなたなら、次は「取得した座標を少しずらして複製する」「特定のサイズ以上のオブジェクトの色を変える」といった応用へスムーズに進めますよ。
CorelDRAW VBAの世界を、自分のペースで楽しんで広げていきましょう!
