【入門編】【条件付きページ複製】特定レイヤーにオブジェクトが存在するページだけを別ドキュメントへ抽出・複製する – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAの深淵へ:条件付きページ抽出で「手作業の地獄」から脱出せよ

こんにちは。CorelDRAWの自動化の世界へようこそ。
日々、何百ページもあるドキュメントから「特定のオブジェクトがあるページだけを抜き出す」作業に追われていませんか?もしマウスをカチカチとクリックしてコピー&ペーストを繰り返しているなら、今日でその地獄とはおさらばしましょう。

今回は、CorelDRAW VBAの真髄である「オブジェクトの走査」と「ドキュメント間転送」を駆使した、実務直結の自動化スクリプトを伝授します。

—

なぜ「マクロの記録」だけでは足りないのか?

多くのユーザーが「マクロの記録」ボタンから始めますが、記録されたコードは「今、あなたが選んだ対象」に対してしか動きません。

プロの自動化とは、「条件を定義し、それをドキュメント全体に走査させる」ことです。今回は、「特定の名前のレイヤーに何らかのオブジェクトが存在するか?」を判定し、条件を満たすページだけを新しいドキュメントに複製するという、非常に強力なロジックを組みます。

—

攻略の設計図:ロジックの要点

この処理を成功させるためには、以下の3ステップを深く理解する必要があります。

1. Pageオブジェクトのループ: `ActiveDocument.Pages`を走査する。
2. レイヤー内のオブジェクト判定: `Layer.Shapes.Count`が0より大きいかをチェックする。
3. ドキュメントの新規作成とコピー: `Copy` / `Paste`ではなく、`Page.CopyTo`メソッドを利用して、ページ構造ごとスマートに移動させる。

—

実践コード:条件付きページ抽出スクリプト

このコードをVBAエディタ(Alt + F11)に貼り付けてください。

Sub ExtractPagesByLayerCondition()
‘ 抽出条件となるレイヤー名を指定
Const TARGET_LAYER_NAME As String = “抽出ターゲット”

Dim sourceDoc As Document
Dim newDoc As Document
Dim p As Page
Dim targetLayer As Layer
Dim isFound As Boolean

Set sourceDoc = ActiveDocument
Set newDoc = CreateDocument() ‘ 新規ドキュメントを作成

‘ 最初の空ページを削除(お好みで)
newDoc.Pages(1).Delete

‘ 元ドキュメントの全ページをチェック
For Each p In sourceDoc.Pages
p.Activate

‘ 指定レイヤーを取得
Set targetLayer = p.Layers.Find(TARGET_LAYER_NAME)

‘ レイヤーが存在し、かつオブジェクトが含まれているか判定
If Not targetLayer Is Nothing Then
If targetLayer.Shapes.Count > 0 Then
‘ 条件クリア:ページを新しいドキュメントへコピー
p.CopyTo newDoc
End If
End If
Next p

MsgBox “抽出完了!新しいドキュメントを確認してください。”, vbInformation
End Sub

—

陥りやすい罠と解決策

1. `ActiveDocument` への過信

コード内で `newDoc` を作成した瞬間、`ActiveDocument` は新しいファイルに移ります。ループの中で `sourceDoc` を明示的に指定していないと、コードは暴走します。「どのドキュメントを操作しているか」を常に変数で固定しておくのが、バグを防ぐ鉄則です。

2. レイヤーの存在確認

`p.Layers.Find(Name)` は、もし該当するレイヤーが見つからない場合、`Nothing` を返します。ここを `If targetLayer Is Nothing Then` と判定せずに突き進むと、プログラムは即座にエラー(Runtime Error 91)で停止します。「ないかもしれない」を想定するのが、堅牢な自動化の第一歩です。

3. コピーのパフォーマンス

`Copy` → `Paste` を繰り返すと、クリップボードを経由するため非常に低速でメモリを消費します。`Page.CopyTo` メソッドを使うことで、CorelDRAWの内部処理で直接ドキュメント間を橋渡しできるため、処理速度が劇的に向上します。

—

さあ、次の一歩へ

このスクリプトは、単なる「ページの抜き出し」にとどまりません。ここから「レイヤー名に特定の接頭辞がついているか」「特定の色のオブジェクトがあるか」といった条件分岐を追加すれば、あなたの仕事のほとんどを自動化できるはずです。

プログラミングは魔法ではありません。「やりたいこと」を「コンピュータが理解できる最小単位の命令」に分解する練習です。

今回のコードを動かせたら、まずは「抽出するレイヤー名」を変えてみてください。それだけで、あなたはもう「マクロの記録」に頼っていた頃の自分とは別次元のエンジニアになっています。

何か詰まったら、いつでも聞いてくださいね。あなたの自動化ライフを心から応援しています。

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