【実務・中級編】【初心者向け】指定した倍率でアクティブドキュメント全体のレイアウトサイズを縮小・拡大して別名で上書き保存する基本自動化 – CorelDRAW VBA解析バイブル

スポンサーリンク

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は、あなたの「思考」を「描画」へとダイレクトに変換する強力なツールです。まずはこのコードをベースに、自分の業務に必要な変数を組み込んでみてください。

さあ、退屈な手作業から解放され、より創造的な仕事へ時間を投資しましょう。

タイトルとURLをコピーしました