【脱・手作業】CorelDRAW VBAで全シェイプの「歪んだ境界線」を瞬時にリセットする方法
こんにちは。CorelDRAWの自動化の世界へようこそ。
現場で作業していると、こんな経験はありませんか?
「オブジェクトを回転させた後、バウンディングボックスが斜めになってしまい、整列コマンドが効かない…」
「グループ化や変形を繰り返すうちに、座標軸が狂ってレイアウトがズレていく…」
これらは、CorelDRAWのオブジェクトが持つ「変換行列(Transformation Matrix)」の蓄積によって起こる現象です。これを手動で一つずつ直すのは、プロの仕事ではありません。
今日は、VBAを使って「全シェイプのバウンディングボックスを強制的にリセット(正立)させる」魔法のようなスクリプトを一緒に作りましょう。これが理解できれば、あなたのCorelDRAW作業は自動化の第一歩を踏み出したことになります。
—
1. なぜ「リセット」が必要なのか?
CorelDRAWのシェイプには「回転」や「傾斜」の情報が数値として記録されています。しかし、複雑な編集を重ねると、この数値が複雑に絡み合い、整列コマンド(Ctrl+A→整列)などが意図した挙動をしなくなることがあります。
今回のマクロの目的は、「現在の見た目を維持したまま、回転・変形情報を初期化する」こと。いわば、オブジェクトに溜まった「重り」を捨てて、身軽にさせる作業です。
—
2. 実用コード:バウンディングボックス・リセットツール
まずは、何も考えずに以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてみてください。
Sub ResetAllShapesBoundingBox()
Dim s As Shape
Dim sr As ShapeRange
‘ アクティブなドキュメントの全オブジェクトを取得
Set sr = ActivePage.Shapes.All
‘ エラー回避のため、グループ化されているものも一度バラす等の処理が必要だが
‘ 今回はシンプルに、各オブジェクトを一度「コピーして貼り付け」ることで
‘ 変換情報をリセットする「裏技」的な手法をとります。
Optimization = True ‘ 描画更新を止めて高速化(プロの定石)
For Each s In sr
‘ シェイプを一度コピーして、その場で貼り付けると
‘ 変換行列がリセットされた状態で生成されます
s.Copy
ActiveLayer.Paste
‘ 元のシェイプを削除
s.Delete
Next s
Optimization = False ‘ 描画更新を再開
ActiveWindow.Refresh ‘ 画面を強制更新
MsgBox “全シェイプのリセットが完了しました!”, vbInformation
End Sub
—
3. コードの「ここが肝」を解説
初心者の方が陥りやすいポイントを、エンジニアの視点で噛み砕きます。
① `Optimization = True` の魔法
CorelDRAW VBAにおいて、最もパフォーマンスを落とすのは「画面の再描画」です。数千個のオブジェクトをループする際、いちいち画面を更新していると、マクロが終わるまでコーヒーを飲んで待つことになります。これを `True` にすることで、劇的に高速化します。
② なぜ「コピー&ペースト」なのか?
CorelDRAWのAPIには「バウンディングボックスを強制的に正規化する」という直接的なメソッドはありません。しかし、オブジェクトを一度クリップボード経由(あるいは内部コピー)で再生成すると、CorelDRAWは内部的にそのオブジェクトの「正位置」を再計算します。これが、現場で最も安定してバグを回避できる手法です。
③ 陥りやすい罠:`For Each` ループ
`For Each` を使っているときにオブジェクトを削除すると、次に処理すべきリストが狂うことがあります。今回は `Shapes.All` を先に取得してリスト化しているので安全ですが、複雑な条件分岐を入れるときは `For i = sr.Count To 1 Step -1` のように「後ろから処理する」のが鉄則です。覚えておいてください。
—
4. さあ、次のステップへ
このコードを動かせたなら、あなたはもうマクロの記録(レコーディング)に頼るだけの初心者ではありません。
- 応用編: 特定のレイヤーにあるものだけ処理したい場合は?
- 発展編: 変換行列を直接操作して、特定の角度だけ補正したい場合は?
CorelDRAWのVBAには、無限の可能性があります。今回作ったコードは、いわばあなたの「自動化エンジン」の最初の部品です。これをベースに、自分だけの便利なツールへと育てていってください。
もし「もっと複雑なグループの中身まで処理したい」といった要望があれば、いつでも聞いてください。設計図から一緒に書き直しましょう。
あなたのクリエイティブな時間が、退屈な手作業から解放されることを願っています!
