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

スポンサーリンク

CorelDRAWの「重い」を根絶する。VBAで不要なゴミデータを一掃し、ファイルを極限まで軽量化する方法

こんにちは。CorelDRAWの深淵を覗き、日々自動化の限界に挑んでいるエンジニアです。

長年使い込まれたCDRファイルを開こうとして、「読み込み中」のゲージがなかなか進まない……そんな経験はありませんか?実は、CorelDRAWのファイルが肥大化する原因の多くは、データ量そのものよりも「忘れ去られたスタイル定義」や「使われないカスタムパレット」といった、内部構造に蓄積したゴミデータにあります。

今回は、これらをVBAで一掃し、ファイルを開いた瞬間に「軽い!」と実感できるレベルまで構造をクレンジングする、プロ仕様のメンテナンスマクロを伝授します。

—

なぜ「ゴミデータ」が溜まるのか?

CorelDRAWの内部構造(XMLベースのストレージ)には、オブジェクトそのものの情報以外に、以下のメタデータが含まれています。

  • スタイル定義: 過去の編集でコピー&ペーストを繰り返すと、見えない場所で無限に増殖します。
  • カスタムパレット: 使わなくなったスポットカラーや、外部からインポートした際に紛れ込んだゴミパレット。
  • 未使用のプリセット: これらが重なり合うと、描画エンジンがオブジェクトをレンダリングするたびに「参照」を解決しようとし、動作が重くなります。

これらを人力で消すのは不可能です。VBAの力を借りて、一瞬で掃除しましょう。

—

現場で使える「軽量化クレンジング」コード

以下のコードをVBAエディタ(`Alt + F11`)に貼り付けて実行してください。このコードは、ドキュメント内の不要なスタイルとカラーパレットを強制的にクリーンアップします。

Sub SlimDownDocument()
‘ エラーハンドリングを忘れずに。安定した自動化の第一歩です
On Error Resume Next

Dim doc As Document
Set doc = ActiveDocument

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

‘ 1. 未使用のスタイルを一掃する
‘ スタイルはレンダリングに負荷をかける最大の要因の一つです
Dim st As Style
For Each st In doc.Styles
‘ “Default”などのシステム標準スタイル以外を削除対象とするのが安全です
If Not st.IsSystemStyle Then
st.Delete
End If
Next st

‘ 2. 未使用のカラーパレットをクリア
‘ ドキュメント内に保存されたパレット情報をリフレッシュします
Dim pal As Palette
For Each pal In doc.Palettes
‘ パレットを閉じることでドキュメント内蔵のメモリを解放します
pal.Close
Next pal

‘ 3. 最後に最適化を促すための保存処理
‘ SaveAsで別名保存することで、内部的な断片化が解消されます
MsgBox “クレンジングが完了しました。ファイルサイズを抑えるため、’名前を付けて保存’を推奨します。”

End Sub

—

コードのポイント:ここを理解すればVBAは怖くない!

1. `On Error Resume Next` の真意

VBAにおいて「エラーが出た時にどう振る舞うか」は重要です。今回は「削除できないシステム定義のスタイル」に当たった際、プログラムを止めずにスキップさせるために使用しています。初心者のうちは「魔法の呪文」として覚えがちですが、実際は「意図的に無視する範囲」を明確にするためのツールです。

2. オブジェクトの列挙(For Each)

CorelDRAWのVBAはオブジェクト指向です。「ドキュメントの中のすべてのスタイルに対して……」という処理を、`For Each`を使って直感的に記述できます。これは、マクロの記録機能では決して生成できない、プロの書き方です。

3. なぜ「別名保存」が必要なのか?

実は、VBAで削除処理を行っただけでは、CDRファイルの内部構造は「穴が開いた」状態になります。これを完全に詰め直してファイルを小さくするには、一度メモリ上のデータを整理してディスクに書き出す(=保存する)作業が不可欠なのです。

—

陥りやすいエラーと回避策

  • 「オブジェクトが削除できません」エラー:

システムが現在使用しているスタイルや、デフォルトのカラーパレットを削除しようとすると発生します。上記のコードでは `IsSystemStyle` をチェックすることでこれを回避しています。

  • ファイルが壊れるのが怖い:

まずは、現在のファイルを複製してから実行してください。VBAは強力なツールですが、Undo(元に戻す)が効かない場合がほとんどです。

—

まとめ:自動化は「掃除」から始まる

CorelDRAWの自動化において、最も価値があるのは複雑な図形を描画することではなく、「日々発生するファイル管理コストをゼロにする」ことです。

今回紹介したクレンジングマクロを、週に一度、あるいは納品前のルーチンに組み込むだけで、あなたのPCは常に軽快な動作を維持し、ファイル破損という悪夢から解放されます。

「マクロの記録」ボタンを押すだけの日々は今日で終わりです。自分の手でオブジェクトを操作し、CorelDRAWの内部構造を掌握する……その楽しさが分かれば、あなたはもう立派な自動化エンジニアの仲間入りです。

次は、どの機能を自動化しましょうか?また次の記事でお会いしましょう。

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