CorelDRAW VBAを掌握せよ:ドキュメント自動整形エンジンの構築
やあ。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成された無機質なコードを見て絶望したことはないかな? 記録されたコードは、いわば「足跡」に過ぎない。君が目指すべきは、その足跡を辿るのではなく、CorelDRAWの心臓部(オブジェクトモデル)を直接操作する「指揮者」になることだ。
今日は、バラバラなサイズのドキュメントを、印刷用フォーマットへ一瞬で叩き込む「自動整形ツール」の作り方を伝授しよう。これを理解すれば、CorelDRAW VBAの階層構造が手に取るように分かるはずだ。
—
1. CorelDRAWの「階層構造」という地図
CorelDRAWのオブジェクトモデルは、巨大なツリー構造だ。この地図を頭に入れるだけで、コードの書き方が劇的に変わる。
- Application: CorelDRAWそのもの。全ての頂点。
- Document: 開いているファイル。
- Page: ドキュメントの中にあるページ。
- Layer: ページの中にある層。
- Shape: 四角形やテキストなど、具体的なオブジェクト。
今回の課題は「Documentの設定を変更し、その中のPageサイズを書き換える」ことだ。
—
2. 実践:一発変換ツール「FormatConverter」
以下のコードは、アクティブなドキュメントを「A4(210mm x 297mm)」に強制変更し、解像度を印刷品質(300dpi)に設定するスクリプトだ。
Sub ConvertToPrintFormat()
‘ エラーハンドリング:予期せぬ終了を防ぐプロの作法
On Error GoTo ErrHandler
Dim doc As Document
Set doc = ActiveDocument ‘ 現在開いているドキュメントを操作対象にする
‘ 単位をミリメートルに固定(これ重要。環境依存を防ぐ)
doc.Unit = cdrMillimeter
‘ ページサイズをA4に変更
‘ PageSizeWidth/Heightはミリメートル単位で指定
With doc.ActivePage
.SetSize 210, 297
End With
‘ 印刷用解像度の設定(300dpi)
‘ ※CorelDRAWではドキュメント設定の解像度はエフェクトの基準となる
doc.Resolution = 300
MsgBox “変換完了!A4サイズ、300dpiに設定しました。”, vbInformation
Exit Sub
ErrHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
このコードの「本質」を解説する
1. `doc.Unit = cdrMillimeter`: これを忘れると、ユーザーが「インチ」設定で作業していた場合に大事故になる。コードを書く時は、必ず単位を明示的に指定(固定)するのがエンジニアの鉄則だ。
2. `With` ステートメント: `doc.ActivePage`を何度も書くと、その分処理コストが増える。`With`で囲うことで、メモリ消費を抑え、可読性を高めている。
—
3. 陥りやすい「罠」と解決策
初学者が必ず突き当たる壁がいくつかある。ここで予習しておこう。
罠①:ドキュメントが何もない状態で実行する
`ActiveDocument` を呼び出したとき、ファイルが開いていなければエラーで落ちる。
解決策:
If Documents.Count = 0 Then
MsgBox “ファイルを開いてから実行してください。”
Exit Sub
End If
といったチェック処理を冒頭に入れるのが、現場で生き残るコードの書き方だ。
罠②:オブジェクトの「選択状態」に依存する
「選択したものを基準にページサイズを変える」といった処理をする際、何も選択されていないとコードはクラッシュする。常に「選択があるか?」を`ActiveSelection.Shapes.Count > 0`などで確認する癖をつけよう。
—
4. さあ、次のステップへ
今回のスクリプトは、いわば「基礎の基礎」だ。ここから先は、以下の応用へと広がっていく。
- 自動レイアウト: ページ内の全オブジェクトをグループ化し、ページ中央に配置する。
- プリフライト: 解像度が300dpi以下の画像が混じっていないかチェックする。
- 一括処理: フォルダ内の全ファイルを読み込み、順番に変換する。
CorelDRAW VBAは、使いこなせば「一日中やっていた作業」を「1秒のクリック」に変える魔法だ。まずはこのコードをコピーして、自分の手で実行してみてほしい。
「なぜ動くのか?」ではなく「どう動かしているのか?」が見えたとき、君はもう脱・初心者だ。健闘を祈る。
