【CorelDRAW VBA道場】複数ページを「一瞬」で個別ファイル化する魔法のコード
こんにちは。CorelDRAWの自動化の世界へようこそ。
日々、何十ページもあるカタログの「ページ分割」を手作業でやっていませんか?「名前を付けて保存」を繰り返し、不要なページを削除し、また保存……。そんな退屈な作業は、今日で卒業しましょう。
今回は、CorelDRAW VBAの真髄である「オブジェクトのライフサイクル管理」を意識しながら、多ページドキュメントをページ単位で個別CDRファイルとして切り出すための、現場で即戦力となる自動化マクロを伝授します。
—
なぜ「マクロの記録」ではダメなのか?
CorelDRAWの「マクロの記録」は便利ですが、あれは「操作の追跡」に過ぎません。プロのコードは、「ドキュメントの構造を正しく理解し、メモリを適切に解放する」という設計思想に基づいています。
今回目指すのは、ただ動くコードではなく、「エラーに強く、メモリ効率の良い」エンジニアリングコードです。
—
実践:ページ分割自動化マクロ
以下のコードをコピーして、VBAエディタ(Alt+F11)の標準モジュールに貼り付けてください。
Option Explicit
Sub ExportPagesToIndividualFiles()
Dim doc As Document
Dim newDoc As Document
Dim p As Page
Dim i As Integer
Dim savePath As String
‘ 1. 現在のドキュメントを取得
Set doc = ActiveDocument
‘ 2. 保存先ディレクトリの指定(デスクトップを指定)
savePath = Environ(“USERPROFILE”) & “\Desktop\SplitFiles_” & Format(Now, “hhmmss”) & “\”
‘ フォルダが存在しなければ作成
If Dir(savePath, vbDirectory) = “” Then MkDir savePath
‘ 3. ページごとにループ処理
For i = 1 To doc.Pages.Count
‘ 現在のページをアクティブに
Set p = doc.Pages(i)
p.Activate
‘ 新しいドキュメントを作成し、現在のページをコピー
Set newDoc = CreateDocument()
doc.Pages(i).CopyTo newDoc
‘ 余分なページ(デフォルトの1ページ目)を削除
If newDoc.Pages.Count > 1 Then newDoc.Pages(1).Delete
‘ CDR形式で保存
newDoc.SaveAs savePath & “Page_” & i & “.cdr”
‘ メモリ解放の鉄則:使い終わったドキュメントは必ず閉じる
newDoc.Close
‘ 次のループへ
Next i
MsgBox “全ページの分割保存が完了しました!”, vbInformation
End Sub
—
コードの心臓部を徹底解説
このコードを「なんとなく」で終わらせないために、重要なポイントを3つだけ解説します。
1. `Set` 命令の重要性
VBAにおいてオブジェクト(ドキュメントやページ)を扱う際は、必ず `Set` を使います。これは「参照」を渡す行為です。これがないと、プログラムは「どのオブジェクトを操作すればいいの?」と迷子になってしまいます。
2. メモリのライフサイクル管理 (`newDoc.Close`)
ここが最も重要です。ループ内で `CreateDocument` を呼ぶたびに、CorelDRAWは裏側でメモリを消費します。`newDoc.Close` を忘れると、ページ数が多い場合にメモリ不足でソフトがクラッシュします。プロのコードは「使い終わった資源を即座に開放する」のが鉄則です。
3. `ActiveDocument` と `doc` の使い分け
マクロの記録は `ActiveDocument` を多用しますが、大規模な開発では `doc` という変数にドキュメントを代入して制御します。こうすることで、意図せず他のドキュメントを操作してしまう事故(ヒューマンエラー)を未然に防げます。
—
陥りやすいエラーと対策
- 「ファイルが見つかりません」エラー:
保存先のパスが適切か確認してください。特にネットワークドライブを指定する場合、権限の問題でエラーになることがあります。まずはデスクトップで試すのが安全です。
- ページがうまくコピーされない:
`CopyTo` メソッドは、オブジェクトのレイヤー構造を維持します。マスターレイヤーを非表示にしている場合などは、その設定も引き継がれるため、必要に応じて `newDoc` のレイヤー状態を制御する処理を追加しましょう。
—
次のステップへ
今回のコードは「全ページを保存する」という基本形ですが、ここから先はあなたのアイデア次第です。
- PDF書き出し: `newDoc.Export` メソッドを追加すれば、印刷用PDFの同時生成も可能です。
- ファイル命名規則: `p.Name` を取得して、ページ名に応じたファイル名に自動変更することも可能です。
CorelDRAW VBAは、あなたの時間を奪う単純作業を、一瞬の思考へと変えてくれる最強のツールです。ぜひこのコードをベースに、自分の業務に合わせた「最強の自動化」を構築してみてください。
もし何か詰まることがあれば、いつでも聞いてくださいね。応援しています!
