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の内部構造を掌握する……その楽しさが分かれば、あなたはもう立派な自動化エンジニアの仲間入りです。
次は、どの機能を自動化しましょうか?また次の記事でお会いしましょう。
