【入門編】【中級者向け】CDRファイルに含まれる不要なカスタムカラーパレットや未使用スタイルを全ページから一括消去してスリム化 – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAを掌握する:肥大化したCDRファイルを「極限までスリム化」する最適化の極意

こんにちは。現場で日々CorelDRAWの自動化と格闘しているエンジニアです。

長年運用しているCDRファイル、気づけば「保存に時間がかかる」「ファイルを開くだけでメモリを食う」なんてことはありませんか?その犯人の多くは、「誰かが過去に一度だけ使ったカスタムカラーパレット」や「数年前に削除したはずのオブジェクトの残骸(スタイル)」です。

今日は、そんな目に見えない「ゴミ」を一掃し、ファイルを物理的に軽量化するプロフェッショナルなクリーニング術を伝授します。マクロの記録を卒業し、CorelDRAWの内部構造を操る第一歩を一緒に踏み出しましょう。

—

なぜファイルは肥大化するのか?

CorelDRAWのファイル形式(CDR)は、非常に多機能です。オブジェクトだけでなく、そのオブジェクトが参照していたスタイル、カラーパレット、そして消したはずのノード情報までが「履歴」や「定義」としてドキュメント内部に保持されることがあります。

特に、外部からインポートした素材や、何度もコピペを繰り返したデータには、不要な「ドキュメントパレット」や「スタイル」が蓄積され、これがファイルサイズを肥大化させる直接の原因となります。

—

実践:不要なパレットとスタイルをパージするVBAコード

このコードは、現在アクティブなドキュメントをスキャンし、ドキュメントに紐付いている未使用のカラーパレットとスタイルを強制的に排除します。

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

Dim doc As Document
Set doc = ActiveDocument

If doc Is Nothing Then
MsgBox “対象のドキュメントが開かれていません。”
Exit Sub
End If

‘ 1. ドキュメントパレットのクリーンアップ
‘ 使われていない色定義を削除し、パレットを最適化する
Dim pal As Palette
Set pal = doc.Palette
If Not pal Is Nothing Then
‘ パレット内の未使用色を削除するメソッドを実行
pal.PurgeUnusedColors
End If

‘ 2. 未使用スタイルの全削除
‘ スタイルが蓄積されると、ファイルを開く速度が著しく低下します
Dim sty As Style
Dim i As Long

‘ コレクションを逆順から削除するのが鉄則(インデックスのズレを防ぐため)
For i = doc.Styles.Count To 1 Step -1
Set sty = doc.Styles(i)
‘ 「Default」スタイルなどは削除しないようガードを入れる
If Not sty.IsDefault Then
‘ 未使用なら削除を試みる
On Error Resume Next ‘ 削除不可のシステムスタイル対策
sty.Delete
On Error GoTo 0
End If
Next i

‘ 画面更新を再開
EventsEnabled = True
Optimization = False

‘ 完了を通知
MsgBox “最適化が完了しました。ファイルを保存してください。”
End Sub

—

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

1. `Optimization = True` の魔法

CorelDRAW VBAにおいて最も重要な設定です。このコードを実行すると、マクロ実行中の「画面の描き直し」を停止します。これを書かないと、オブジェクトをいじるたびに画面がチラつき、処理速度が劇的に低下します。エンジニアの必須の作法です。

2. コレクションを「後ろから」ループする

`For i = doc.Styles.Count To 1 Step -1` の部分に注目してください。
もし `1 To Count` で削除していくと、スタイルを削除した瞬間にインデックスがずれてエラーになったり、削除漏れが発生します。「削除を伴うループは後ろから」。これはVBA開発における黄金律です。

3. `On Error Resume Next` の使いどころ

システムが保護している重要なスタイルに対して `.Delete` を実行すると、コードが停止してしまいます。あえてエラーを無視させ、削除可能なものだけを消し去るという「プロの割り切り」がここで活きています。

—

陥りやすい罠とアドバイス

  • 「マクロの記録」との違い:

「マクロの記録」は操作をトレースするだけですが、今回のコードは「オブジェクトモデル」を直接操作しています。`doc.Palette` や `doc.Styles` を直接触ることで、GUI上では見えない深い階層のデータにアプローチできるのがVBAの強みです。

  • バックアップは必須:

ファイルを最適化するコードです。万が一のデータ消失を防ぐため、必ず実行前にファイルのコピーを作成してください。

—

次のステップへ

このスクリプトを使いこなせるようになれば、あなたはもう「マクロの記録」を使っていた頃のあなたではありません。

次は「特定のレイヤーに隠れた非表示オブジェクトを全て消す」「埋め込まれた不要なビットマップを解像度指定で一括リサイズする」といった、より高度な自動化に挑戦してみてください。

CorelDRAWのVBAは、知れば知るほどあなたの右腕となってくれる頼もしい相棒です。何か壁にぶつかったら、いつでも戻ってきてください。また次の技術でお会いしましょう!

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