CorelDRAW VBAを掌握する:レイアウトの一括リサイズと堅牢な保存処理の極意
業務自動化の世界へようこそ。CorelDRAWのVBAは、単なる「操作の記録」ではありません。DOM(Document Object Model)を理解し、オブジェクトの生死を制御する能力こそが、非効率な手作業からあなたを解放する唯一の鍵です。
今回は、初心者が陥りがちな「とりあえず動くコード」から脱却し、実務で通用する堅牢な一括リサイズ自動化を実装します。
—
1. なぜ「Scale」メソッドだけでは不十分なのか
初心者は往々にして、`ActiveDocument.ActivePage.Shapes.All.Scale` のような単純な呼び出しに頼ります。しかし、現場のデータは複雑です。
- グループ化されたオブジェクトの挙動
- 線幅(Outline)のスケーリング有無
- ロックされたレイヤーの存在
これらを無視したコードは、数回に一度の割合で「予期せぬレイアウト崩れ」を引き起こします。プロの設計においては、「操作対象の確定」と「エラーハンドリング」の二段構えが必須です。
—
2. 堅牢なリサイズ&別名保存のプロダクションコード
以下のコードは、単にリサイズするだけでなく、拡張機能やパスの不整合を考慮し、安全にプロセスを完了させるためのテンプレートです。
Option Explicit
‘ ———————————————————
‘ 機能:ドキュメント全体を指定倍率でリサイズし、別名保存する
‘ ———————————————————
Public Sub ResizeAndSaveDocument()
Dim doc As Document
Dim scaleFactor As Double
Dim savePath As String
‘ 1. 初期化と安全な参照取得
Set doc = ActiveDocument
If doc Is Nothing Then Exit Sub
scaleFactor = 0.5 ‘ 例:50%に縮小
savePath = doc.FilePath & Left(doc.FileName, InStrRev(doc.FileName, “.”) – 1) & “_Scaled.cdr”
On Error GoTo ErrHandler
‘ 2. パフォーマンス最適化:画面更新を停止し、処理速度を向上させる
Application.Optimization = True
‘ 3. 全オブジェクトの選択とスケーリング
‘ 全てのレイヤーをアンロックして全選択する手法が最も確実
doc.Unit = cdrMillimeter ‘ 単位を固定して計算ミスを防ぐ
Dim s As ShapeRange
Set s = doc.ActivePage.Shapes.All
‘ プロポーションを維持したスケーリング実行
‘ ScaleWidth/Heightの引数には倍率(%)を指定
s.Scale (scaleFactor 100), (scaleFactor 100)
‘ 4. ドキュメント自体のサイズ調整(重要)
‘ 中身が縮小してもキャンバスサイズが変わらなければ意味がない
doc.ActivePage.SetSize doc.ActivePage.SizeWidth scaleFactor, _
doc.ActivePage.SizeHeight scaleFactor
‘ 5. 別名保存
doc.SaveAs savePath
MsgBox “リサイズ完了: ” & savePath, vbInformation
ExitSub:
‘ 6. クリーンアップ:必ず最適化を元に戻す
Application.Optimization = False
doc.ActiveWindow.Refresh
Exit Sub
ErrHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
Resume ExitSub
End Sub
—
3. プロの設計が光る3つのポイント
① `Application.Optimization = True` の魔力
CorelDRAW VBAにおいて、ループ処理やオブジェクト操作のたびにUIが更新されるのは最大のパフォーマンス低下要因です。これを`True`にするだけで、処理速度は劇的に向上します。大規模なデザインファイルであればあるほど、その恩恵は計り知れません。
② 単位(Unit)の強制指定
開発環境によってドキュメントのデフォルト単位が「インチ」だったり「ピクセル」だったりすると、計算式が狂います。`doc.Unit = cdrMillimeter` のように、実行前に単位系を強制的に定義するのが、バグを未然に防ぐプロの作法です。
③ `On Error GoTo` によるライフサイクル管理
例外が発生した際に`Optimization = True`のままコードが終了すると、CorelDRAWのUIがフリーズしたような状態になります。`ErrHandler`で確実に`Optimization = False`へ復帰させる構造は、長期運用における「事故」を防ぐための生命線です。
—
4. 次のステップ:データベース連携への備え
このコードを応用すれば、Excelリストを読み込んで「数百個のバリエーションを自動生成する」といったワークフローへ拡張可能です。
- ファイル名生成の自動化: 日付や連番を付与する関数を作成する。
- PDF書き出しの追加: `doc.PublishToPDF` メソッドを組み合わせれば、リサイズ後に即座に印刷用データまで出力可能です。
CorelDRAW VBAは、あなたの「思考」を「描画」へとダイレクトに変換する強力なツールです。まずはこのコードをベースに、自分の業務に必要な変数を組み込んでみてください。
さあ、退屈な手作業から解放され、より創造的な仕事へ時間を投資しましょう。
