【入門編】【中級者向け】複数ページにわたるカタログデータのページ単位分割と個別CDRファイル化マクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

【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は、あなたの時間を奪う単純作業を、一瞬の思考へと変えてくれる最強のツールです。ぜひこのコードをベースに、自分の業務に合わせた「最強の自動化」を構築してみてください。

もし何か詰まることがあれば、いつでも聞いてくださいね。応援しています!

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