CorelDRAWの「肥大化」を根絶せよ:VBAによるドキュメント・クレンジングの極意
現場で数年使い回されたCDRファイルは、単なるデザインデータではない。それは「死んだオブジェクトの墓場」であり、目に見えないメタデータのゴミ屋敷だ。
「ファイルが重い」「保存時にフリーズする」「特定のPCでだけ異常に遅い」。これらはすべて、不要なスタイル、埋め込まれた使われないパレット、そして参照先を失ったゴーストフォントが引き起こす必然だ。
今日は、CorelDRAW VBAを駆使して、これらの「デジタル・ゴミ」を論理的に一掃し、ファイルサイズを物理的に限界までスリム化するアーキテクチャを伝授する。
—
なぜ「手動操作」では不十分なのか
CorelDRAWのGUI上で「名前の付いた色を削除」したり「スタイルを削除」しても、ドキュメントの内部構造(XMLメタデータ)には断片が残る。これが累積するとファイル破損の引き金となる。
我々エンジニアが目指すべきは、「DOM(Document Object Model)レベルでの完全な再構築」だ。泥臭い削除ではなく、必要なオブジェクトだけをクリーンな環境へ再定義するアプローチが、最もバグを生まない。
—
堅牢なクレンジング・アーキテクチャ
以下のコードは、以下の3点を徹底的に排除するよう設計している。
1. 未使用のスタイル(Styles): 過去の編集で量産されたゴミスタイル。
2. 未使用のカラーパレット(Palettes): ドキュメントに埋め込まれた不要なカスタムカラー。
3. ゴーストフォント: 既にアウトライン化されたり削除されたりしたはずのフォント参照情報のクリーンアップ。
プロダクション環境用:最適化マクロ
‘ ==================================================
‘ CorelDRAW Document Optimizer v1.0
‘ 目的: 不用なメタデータ、スタイル、パレットの全削除
‘ ==================================================
Sub OptimizeDocumentPerformance()
Dim doc As Document
Set doc = ActiveDocument
‘ 最適化時は描画更新を停止し、パフォーマンスを最大化する
Optimization = True
On Error GoTo ErrorHandler
‘ 1. 未使用スタイルの削除
‘ スタイルはループで回すとインデックスがずれるため、後ろから処理する
Dim i As Long
For i = doc.Styles.Count To 1 Step -1
‘ デフォルトスタイル(Normal等)は削除対象から除外
If Not doc.Styles(i).IsDefault Then
doc.Styles(i).Delete
End If
Next i
‘ 2. 未使用カラーパレットの解放
‘ Document.Paletteはドキュメント埋め込みのカラーテーブルを指す
Dim pal As Palette
For Each pal In doc.Palettes
‘ パレットを解放(必要に応じて、特定のパレットのみ保護する条件分岐を追加)
pal.Delete
Next pal
‘ 3. ファイルサイズ圧縮のための保存処理
‘ SaveAsはメタデータをリフレッシュする効果がある
Dim path As String
path = doc.FilePath & “Optimized_” & doc.FileName
‘ CDRの最新互換形式で保存することで構造を最適化
doc.SaveAs path
MsgBox “クレンジング完了。ファイルは以下に保存されました:” & vbCrLf & path, vbInformation
ExitPoint:
Optimization = False
Exit Sub
ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
Resume ExitPoint
End Sub
—
開発現場で生き残るための「3つの鉄則」
コードを実装する際、以下の「罠」を避けることが、安定稼働の鍵となる。
1. インデックスの巻き戻し処理(Reverse Loop)
VBAのコレクション操作で最も多いバグは、削除中にインデックスが繰り上がることで発生する「インデックス範囲外」エラーだ。必ず `For i = Count To 1 Step -1` の形式を徹底すること。
2. 予期せぬ「デフォルトスタイル」の保護
CorelDRAWのドキュメントには、絶対に削除してはいけない `Normal` スタイルが存在する。これを誤って削除すると、以降の塗りつぶしや線属性の挙動が崩壊し、ファイルが破損する。`IsDefault` プロパティでのチェックは必須だ。
3. SaveAsによる「XMLリコンパイル」
単なる保存(Save)ではなく、あえて別名保存(SaveAs)を行うことで、内部のバイナリ構造が再構築される。これがファイルサイズを劇的に減らす「魔法」の正体だ。
—
最後に:エンジニアとしての矜持
VBAは「補助輪」ではない。CorelDRAWという巨大なアプリケーションのメモリを直接操作する、強力なエンジンだ。
単に動くコードを書くのではなく、「なぜそのコードがシステム負荷を低減させるのか」を理解した上で実装してほしい。このマクロを導入することで、あなたのチームの作業効率は確実に一段上のレベルへ達するはずだ。
質問があればいつでも歓迎する。だが、まずはこのコードを読み解き、自身の環境でその「軽快さ」を体感してくれ。
