【入門編】【初心者向け】CorelDRAWドキュメント内に残された空のテキストフレームやゴミオブジェクトを自動検出して一括削除するクリーンアップツール – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、コードの中身はチンプンカンプン…」という状態から一歩抜け出し、自分の手でデザインの現場を効率化するコードを書く。ここをクリアすれば、CorelDRAW VBAの基本はバッチリですよ!

今回は、入稿直前のデータにありがちな「見えないゴミオブジェクト(空のテキストフレームや、中身のないパス)」をワンクリックで一括駆除するクリーンアップツールの作り方を、プロの視点を交えながら優しく、そして本質的に解説していきます。

—

なぜ「ゴミオブジェクト」は放置してはいけないのか?

デザイン作業に夢中になっていると、意図せずクリックしてできてしまった「文字の入っていないテキストフレーム」や「塗りと線が両方なしのパス」が、アートボードの隅っこにポツンと残されてしまうことがあります。

これらを放置すると、以下のような恐ろしいトラブルを引き起こします。
1. 印刷時の予期せぬエラー: RIP(印刷用ラスタライザー)が空のオブジェクトを誤認し、レイアウト崩れや抜け落ちを起こす。
2. ファイルサイズの肥大化と動作の重化: 無駄なノードやオブジェクトが増えることで、CorelDRAW自体の動作が重くなる。
3. データチェックの二度手間: 人間の目だけで数千個のオブジェクトからゴミを探すのは、苦行でしかありません。

だからこそ、プログラムの力で一瞬にして掃除する仕組みが必要なのです。

—

CorelDRAW VBAの基本構造:オブジェクトの「階層」を理解する

CorelDRAWのVBAでオブジェクトを操作するとき、必ず頭に入れておかなければならない「地図」があります。それが以下の階層構造です。

ActiveDocument (今開いているドキュメント)
└ ActivePage (今見ているページ)
└ ActiveLayer (今触っているレイヤー)
└ Shapes (その中にあるすべての図形たち)

この「Shapes(図形たち)」を上から順にペロッとめくりながら、「お前はゴミか? それとも本物のデザインか?」と判定していくのが、今回のクリーンアップツールの核心となります。

—

実装コード:一括クリーンアップマクロ

以下のコードを、CorelDRAWのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてください。

Sub CleanUpDocument()
Dim sh As Shape
Dim targetShape As Shape
Dim deletedCount As Long
Dim i As Long

‘ 処理件数の初期化
deletedCount = 0

‘ 警告表示や画面描画を一時停止して処理スピードを爆発的に上げる
EventsEnabled = False
ActiveDocument.BeginCommandGroup “ゴミオブジェクトの一括削除”

On Error GoTo ErrorHandler

‘ 【重要】削除を行うときは、コレクションを「後ろから前へ(末尾から先頭へ)」ループさせるのが鉄則!
‘ 前から進めると、要素が消えた瞬間にインデックスがズレてバグの原因になります。
For i = ActivePage.Shapes.Count To 1 Step -1
Set sh = ActivePage.Shapes(i)

‘ 判定フラグを初期化
Dim isGarbage As Boolean
isGarbage = False

‘ 条件1: 「テキストフレーム」かつ「中身が完全に空」の場合
If sh.Type = cdrTextShape Then
If Trim(sh.Text.Story.Text) = “” Then
isGarbage = True
End If
End If

‘ 条件2: 「曲線(パス)」かつ「ノードが極端に少ない、または塗りと線がない」などの判定もここに追加可能
‘ 今回はシンプルに「線も塗りも持たないアート的無効オブジェクト」を対象にします
If sh.Type = cdrCurveShape Then
If sh.Fill.Type = cdrNoFill And sh.Outline.Type = cdrNoOutline Then
isGarbage = True
End If
End If

‘ ゴミ判定されたオブジェクトを抹消
If isGarbage = True Then
sh.Delete
deletedCount = deletedCount + 1
End If

Next i

‘ 処理の終了処理
ActiveDocument.EndCommandGroup
EventsEnabled = True

‘ 完了メッセージ
MsgBox “クリーンアップが完了しました!” & vbCrLf & _
“削除された不要オブジェクト数: ” & deletedCount & “個”, vbInformation, “最適化完了”
Exit Sub

ErrorHandler:
‘ エラー時の安全装置
EventsEnabled = True
ActiveDocument.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub

—

コードのここがポイント!プロの知見を解説

初心者の方が特に躓きやすいポイントや、「おっ」と思わせるプロのテクニックを3つ解説します。

1. ループは「後ろから前へ(`Step -1`)」回せ!

コレクション(リスト)に入っているオブジェクトを削除するとき、先頭から順に `For i = 1 To Shapes.Count` と回してしまうと、1番目を消した瞬間に元の2番目が1番目に繰り上がり、プログラムが混乱してエラーを起こすか、要素を飛ばしてしまいます。
「リストを消すときは、後ろの尻尾から順番に消していく(`Step -1`)」。これはGUI自動化の絶対的な鉄則です。

2. `Trim(sh.Text.Story.Text) = “”` で空文字を完璧にキャッチ

「一見文字が入っていないように見えても、半角スペースや改行コードだけが入っている」というケースは実務で非常によくあります。
VBAの `Trim関数` を使うことで、目に見えない余白や改行を取り除き、「本当に文字がゼロか」を厳密に判定することができます。

3. 画面描画の停止(`EventsEnabled = False`)

オブジェクトが数千個ある複雑なドキュメントでこれを実行すると、CorelDRAWが一つ消すごとに画面を再描画しようとしてフリーズしたような状態になります。
処理の最初に画面更新を止め、最後に一気に描画を再開させることで、処理速度を何倍も高速化させることができます。

—

まとめ:自動化の第一歩を踏み出そう

今回は、CorelDRAWドキュメント内のゴミオブジェクトを一掃する実用的なマクロを作成しました。
「ボタン一つで面倒な作業が一瞬で終わる」この快感を覚えてしまうと、もう手動でのデータチェックには戻れなくなります。

ここをクリアしたあなたなら、レイヤーの自動仕分けや、特定カラーの置き換えといった、より高度な自動化への扉を開く準備はバッチリです。ぜひ、日々の業務にこのマクロを取り入れて、デザインとエンジニアリングの融合を楽しんでくださいね!

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