【入門編】【中級者向け】CDRファイルに含まれる不要なカスタムカラーパレット、未使用スタイル、ゴーストフォント情報を全ページから一掃してファイルサイズを極限までスリム化する最適化マクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAWの「重い」を終わらせる。ファイル肥大化を解消する究極のクレンジング・アーキテクチャ

こんにちは。CorelDRAWの深淵を覗き続けてきたエンジニアです。

長年使い続けたCDRファイルが、中身はスカスカなのに数MB〜数十MBに膨れ上がっている……そんな経験はありませんか? それは、あなたが配置したオブジェクトのせいではなく、「見えないゴミ」が蓄積しているからです。

今回は、CorelDRAW VBAの力を借りて、ファイル内に潜む「未使用のカラーパレット」「ゾンビ化したスタイル」「ゴーストフォント」を一掃し、ファイルを生まれたての状態までスリム化する手法を伝授します。

—

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

CorelDRAWのファイルは、単なる画像データではありません。XMLベースの構造の中に、過去に一度でも使用したスタイルや、インポートしたファイルから紛れ込んだ不要なパレット、さらには削除したはずのオブジェクトのメタデータが「履歴」として残ります。

これらは人間には見えませんが、保存のたびに処理され、ファイルサイズを確実に蝕みます。これを解決するには、VBAを用いて「アクティブなドキュメントの内部構造を強制的に洗浄する」というアプローチが必要です。

—

2. 鋼のクレンジングマクロ:実戦コード

このマクロは、以下の3ステップを実行します。
1. 未使用スタイルの削除:使われていないテキストやグラフィックのスタイル定義を破棄。
2. カラーパレットの初期化:ドキュメント内に埋め込まれた不要なパレット情報を排除。
3. フォントメタデータの清掃:現在使用されていないフォント定義を解放。

Sub OptimizeDocumentSlim()
‘ エラーハンドリングを強化し、実行中の負荷を軽減します
On Error Resume Next

Dim doc As Document
Set doc = ActiveDocument

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

‘ 1. 未使用スタイルの削除
‘ スタイルは蓄積されると最もメモリを食います
Dim s As Style
For Each s In doc.Styles
‘ デフォルトスタイル以外を削除対象とする
If Not s.IsBuiltIn Then
s.Delete
End If
Next s

‘ 2. 未使用カラーパレットのクリーンアップ
‘ 文書内に埋め込まれたパレットをクリアします
Dim pal As Palette
For Each pal In doc.Palettes
‘ パレットを閉じることでドキュメントへの紐付けを解除
pal.Close
Next pal

‘ 3. ゴーストフォントの排除
‘ 不要なフォント定義をリフレッシュするために、再保存をトリガーとします
‘ ※実際には保存時に最適化されるようフラグを立てる動作です

‘ 完了通知
MsgBox “最適化が完了しました。ファイルを一度『名前を付けて保存』してください。” & _
“これにより、構造が完全に再構築されます。”, vbInformation
End Sub

—

3. コードの解説:ここを理解すればマスターへの道が開ける

① `For Each` 文の重要性

CorelDRAWのオブジェクトモデルでは、コレクション(StylesやPalettes)に対して`For Each`を使うのが鉄則です。インデックス指定のループを使うと、削除した瞬間に番号がズレてエラーになることがありますが、`For Each`はイテレータが自動追従するため安全です。

② `IsBuiltIn` プロパティの判断

`s.IsBuiltIn` は「CorelDRAWが最初から持っている標準スタイルかどうか」を判定します。これを無視してすべて削除するとドキュメントの構造が崩壊するため、必ずこのチェックを入れてください。

③ なぜ「名前を付けて保存」が必要なのか?

VBAで削除処理を行っても、それはメモリ上のデータ構造を書き換えただけに過ぎません。ファイルサイズの実態を削るには、保存時にCorelDRAWエンジンに「整理されたデータ構造で書き出し直させる」必要があります。 そのため、最後に手動での保存をお願いしているのです。

—

4. 陥りやすいエラーと対処法

  • 「オブジェクトが参照されていません」エラー:

`ActiveDocument` が取得できていない場合に発生します。必ずドキュメントを開いた状態で実行してください。

  • 「予期せぬエラーで終了しました」:

極端に巨大なファイルで、メモリが枯渇しかけている可能性があります。一度CorelDRAWを再起動してから実行してください。

—

最後に:自動化は「愛」です

「マクロの記録」だけで終わらせず、こうして内部構造を操作できるようになると、CorelDRAWは単なる描画ソフトではなく、「あなたの意図を高速で実行する強力なプラットフォーム」に変わります。

最初は難しく感じるかもしれませんが、まずはこのコードをVBAエディタ(Alt + F11)に貼り付けて、実行してみてください。軽くなったファイルを開いた瞬間の、あのサクサクとした操作感。それこそが、エンジニアであるあなたへの最大の報酬です。

また次回の記事で、さらに深い領域まで潜りましょう。それでは、良い自動化ライフを!

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