CorelDRAW VBAを掌握せよ:アートボード自動レイアウトの「極限」
エンジニア諸君。CorelDRAWで数百枚のアセットをいちいち手動で中央配置・リサイズしていないか? その作業に費やす数秒の積み重ねが、君のクリエイティビティをどれほど殺しているか自覚すべきだ。
CorelDRAW VBAは、正しく扱えば最強の自動化エンジンだが、一歩間違えればメモリリークと予期せぬ挙動の温床となる。今日は、「どんなサイズのアートワークも、指定比率のカンバスへ瞬時にフィットさせる」という実務の壁を突破する、堅牢なコードを授ける。
—
1. なぜ「手動操作」がプロのエンジニアを殺すのか
初心者は往々にして、`ActiveSelection` に対して適当に `SetSize` を連発する。だが、実務環境では以下の問題が必ず発生する。
- グループ化の欠如: 複数のオブジェクトがある場合、個別にリサイズされるという悲劇。
- 座標系の罠: 基準点(アンカー)の指定漏れにより、中央ではなく左下へ飛んでいく図形。
- アスペクト比の崩壊: 縦横比を固定せずリサイズし、デザインが歪む。
我々が目指すのは「思考停止でもエラーを吐かない」設計だ。
—
2. 堅牢なレイアウトロジック:プロダクションコード
以下のコードは、単なるスクリプトではない。`Selection` をグループ化し、カンバス(ページ)サイズを基準に、余白を維持しつつ最大化するアルゴリズムだ。
Option Explicit
‘ @brief 指定したページサイズに選択オブジェクトを中央配置・一括フィットさせる
Public Sub FitToCanvasPro()
Dim sr As ShapeRange
Dim sGroup As Shape
Dim pageW As Double, pageH As Double
Dim objW As Double, objH As Double
Dim scaleFactor As Double
‘ 1. エラーハンドリングの要:選択物がない場合を即座に排除
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “対象オブジェクトを選択してください。”, vbCritical
Exit Sub
End If
‘ 2. Undoの最小単位化(必須)
Optimization = True
ActiveDocument.BeginCommandGroup “AutoLayout”
‘ 3. オブジェクトをグループ化して単一エンティティとして扱う
Set sr = ActiveSelectionRange
Set sGroup = sr.Group
‘ 4. ページサイズの取得 (単位はドキュメント設定に依存)
pageW = ActivePage.SizeWidth
pageH = ActivePage.SizeHeight
‘ 5. 最適な拡大率の計算(アスペクト比を維持)
objW = sGroup.SizeWidth
objH = sGroup.SizeHeight
If (pageW / pageH) > (objW / objH) Then
scaleFactor = pageH / objH
Else
scaleFactor = pageW / objW
End If
‘ 6. リサイズと配置
sGroup.SetSizeW objW scaleFactor 0.95, objH scaleFactor 0.95 ‘ 95%の余白を確保
sGroup.AlignToShape cdrAlignHCenter + cdrAlignVCenter, ActivePage.FindShape(Type:=cdrPageLayer)
‘ 7. 後処理
sGroup.Ungroup
ActiveDocument.EndCommandGroup
Optimization = False
ActiveWindow.Refresh
End Sub
—
3. コードの解説:なぜこの書き方なのか
① `Optimization = True` の魔法
CorelDRAWの描画エンジンは非常に重い。ループ処理や大量のオブジェクト操作を行う際、これをオフにしないとCPUが悲鳴を上げ、処理時間が数倍に跳ね上がる。これは自動化ツールにおける「基本中の基本」だ。
② `BeginCommandGroup` によるトランザクション管理
もし途中で処理が失敗しても、Ctrl+Z(Undo)で一発で元に戻せるようにする。これが実装されていないツールは、現場では「破壊兵器」と呼ばれる。
③ 余白の動的確保
`0.95` という係数を掛けているのは、デザインがカンバスギリギリに配置されると、印刷や書き出し時に事故の元になるからだ。現場の知見とは、こうした細かな「遊び」の設計にある。
—
4. プロの現場への導入アドバイス
- ファイル連携の注意: 外部のCSVからサイズ情報を読み込んでリサイズする際は、`ActiveDocument.SaveAs` の前に必ず `If Dir(…)` でファイル存在確認を行え。上書き保存の事故は、どれだけコードが美しくてもキャリアを傷つける。
- 保守性の極意: このコードを `GlobalMacros.gms` に保存し、CorelDRAWのワークスペースにボタンとして登録せよ。ショートカットキーを割り当てれば、作業時間はゼロになる。
最後に:エンジニアへの問い
ツールは作って終わりではない。使い手が「これがないと仕事にならない」と感じた瞬間から、それが本当のツールとなる。今回のコードをベースに、君たちの現場の要件(例えば、トンボを自動生成する、特定のレイヤーのみを対象にする等)を肉付けしてほしい。
技術は常に、人間の面倒を排除するために存在する。CorelDRAWのポテンシャルを解放するのは、いつだって君たちのコードだ。健闘を祈る。
