【入門編】【初心者向け】不要な空白ページを一網打尽!マルチページCDRファイルから空ページを自動検出して削除する手法 – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBA道場:不要な「空ページ」を瞬殺して、プロのデータ管理術を身につけよう

こんにちは。現場で鍛え抜かれた業務自動化の知恵を、少しずつあなたに伝授していきます。

CorelDRAWでデザインをしていると、いつの間にか増えてしまうのが「何も描かれていない空白のページ」です。これ、放置しておくとファイルサイズが肥大化するだけでなく、印刷時にトラブルの元になりますよね。

今回は、そんな「無駄な空ページ」を一網打尽にして、スマートに削除するVBAスクリプトを一緒に書いていきましょう。ただコードを写すだけでなく、「なぜそのコードが必要なのか」という本質まで解説します。これさえ理解すれば、あなたはもう脱・マクロ初心者です。

1. そもそも「空ページ」をどう判定するか?

CorelDRAW VBAにおいて、ページ(`Page`オブジェクト)が空かどうかを判定するロジックはシンプルです。

  • ページ内のレイヤーを走査する
  • 各レイヤー内のオブジェクト数を確認する

これだけです。厳密には「非表示レイヤー」や「ガイド線」などの扱いもありますが、まずは「印刷可能なオブジェクトが一つでもあるか」に焦点を絞りましょう。

2. 実践!空ページ削除スクリプト

以下のコードをVBAエディタに貼り付けてみてください。重要なのは、「後ろのページから削除していく」という鉄則です。

Sub PurgeEmptyPages()
‘ パフォーマンス向上のため、画面更新を一時停止
Application.Optimization = True

Dim p As Page
Dim i As Integer
Dim hasObjects As Boolean

‘ 重要:ページを削除する際は、必ず後ろ(最後)からループしてください。
‘ 前から削除すると、インデックス番号がずれて予期せぬエラーや削除漏れが発生します。
For i = ActiveDocument.Pages.Count To 1 Step -1
Set p = ActiveDocument.Pages(i)

‘ ページ内の全レイヤーを調査
hasObjects = False
Dim lyr As Layer
For Each lyr In p.Layers
‘ レイヤー内にオブジェクトが一つでもあれば、空ではないと判定
If lyr.Objects.Count > 0 Then
hasObjects = True
Exit For
End If
Next lyr

‘ 空ページなら削除(ただし、最後の1ページはドキュメントの仕様上残す)
If Not hasObjects Then
If ActiveDocument.Pages.Count > 1 Then
p.Delete
End If
End If
Next i

‘ 画面更新を再開
Application.Optimization = False
Application.Refresh

MsgBox “不要な空白ページのパージが完了しました!”, vbInformation
End Sub

3. コードの「ここが重要!」ポイント解説

① `Step -1` の魔法

プログラミング初心者が最も陥りやすい罠が、前から順番に削除してしまうことです。1ページ目を消すと、2ページ目が自動的に1ページ目に繰り上がりますよね? これにより、ループのカウントと実際のページ数が一致しなくなり、ループが異常終了したり、削除すべきページを見逃したりします。
「配列やコレクションを削除するときは、後ろから」。これはエンジニアの鉄則です。

② `Application.Optimization` の恩恵

`Application.Optimization = True` は、VBAにおける「手抜き工事(褒め言葉)」です。これを設定すると、処理中の画面描画が止まるため、処理速度が飛躍的に向上します。特にページ数が多いドキュメントでは必須のテクニックです。

③ なぜ「最後の1ページ」を残すのか

CorelDRAWの仕様上、ドキュメントからすべてのページを消すことはできません。エラーを防ぐために `If ActiveDocument.Pages.Count > 1` という安全装置を入れています。

4. さらなる高みを目指すあなたへ:注意点

このスクリプトは非常に強力ですが、以下の点に注意してください。

  • ガイドラインの扱い: ガイドラインは `Objects` カウントに含まれない場合があります。もし「ガイドしかないページも削除したい」のであれば、`lyr.Guides` プロパティも確認するロジックを追加する必要があります。
  • マスターレイヤー: マスターページ(全ページ共通レイヤー)に描画がある場合、各ページは「空」に見えても実際には印刷されます。本スクリプトは「各ページ固有のレイヤー」を基準にしているため、現場の運用に合わせて調整してください。

最後に:自動化は「思考の解放」です

「毎回手作業でページを見回って削除する」という時間は、クリエイティブな作業には全く不要なコストです。今回書いたコードは、たった数行ですが、あなたの作業時間を確実に年間数時間、あるいは数十時間分短縮してくれるはずです。

CorelDRAW VBAは、使いこなせば最強の武器になります。まずはこのコードで「自動化の快感」を味わってみてください。何かわからないことがあれば、またいつでも聞きに来てくださいね。

次は、「特定の名前がついたオブジェクトを一括抽出する」なんてテクニックに挑戦してみるのも面白いですよ。それでは、良いエンジニアリング・ライフを!

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