【入門編】【中級者向け】CDRファイル内の未使用カラーパレットや不要なフォントスタイルを自動削除して軽量化を図るマクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
日々、デザイン業務で何ギガものCDRファイルを扱っていると、「なんだか最近、ファイルの保存や起動が重いな……」「急に動作がカクつくようになった」と感じたことはありませんか?

その原因、実はドキュメントの奥底に溜め込まれた「ゴーストデータ」にあるんです。

使っていないカスタムカラーパレット、あちこちに散らばる名前だけの不要なスタイル、そして過去の流用で混入した使われていないフォント情報……。これらは目に見えないところでドキュメントのメモリを圧迫し、ファイルサイズを肥大化させる元凶となります。

今回は、マクロの記録から一歩抜け出し、CorelDRAWの内部構造をキレイに掃除して動作を劇的に軽快にする「ドキュメント軽量化メンテナンススクリプト」の作り方を、優しく徹底解説していきます。ここをクリアすれば、あなたのVBAスキルは確実に中級者の領域に到達しますよ!

1. なぜCorelDRAWのファイルは重くなるのか?

CorelDRAWでデザインを作っていると、意図せずとも以下のような「ゴミデータ」が蓄積されていきます。

1. 未使用のスポットカラー(特色)やパレット

  • 他のファイルからコピー&ペーストを繰り返すうちに、使われていないカラーパレットやスタイルがドキュメント内に残存します。

2. 不要なグラフィック・テキストスタイル

  • 「名前だけ定義されていて、実際にはどのオブジェクトにも適用されていないスタイル」は、地味にメモリを食います。

3. フォントの残骸

  • テキストを全てアウトライン化したり削除したりしても、ドキュメントのフォントテーブルにその履歴が残ることがあります。

これらを人の手で一つひとつ探して削除するのは、広大なジャングルをしらみつぶしに探すようなもの。だからこそ、VBAの自動化(パージ処理)の出番です。

2. 【実践】ドキュメントを極限まで軽くするマクロコード

それでは早速、実際のコードを見てみましょう。
以下のコードをCorelDRAWのVBAエディタ(Alt + F11)に貼り付けて実行するだけで、ドキュメント内の不要なパレットやスタイルを自動でスキャンし、一網打尽に削除してくれます。

Sub PurgeUnusedDataAndOptimize()
‘ —————————————————————–
‘ CorelDRAW ドキュメント軽量化メンテナンススクリプト
‘ —————————————————————–
Dim doc As Document
Set doc = ActiveDocument

‘ ドキュメントが開かれていない場合のガード処理
If doc Is Nothing Then
MsgBox “処理対象となるドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

‘ 処理前のファイルサイズ(目安としてパスがあれば表示)
Dim initialSize As Long
On Error Resume Next
initialSize = FileLen(doc.FullName)
On Error GoTo 0

‘ 画面描画を停止して処理速度を爆発的に上げる(超重要テクニック!)
EventsEnabled = False
doc.BeginCommandGroup

On Error GoTo ErrorHandler

Dim cleanedStylesCount As Integer
Dim cleanedPalettesCount As Integer

cleanedStylesCount = 0
cleanedPalettesCount = 0

‘ —————————————————————–
‘ 1. 未使用のスタイル(Text & Graphic Styles)の削除
‘ —————————————————————–
Dim st As Style
Dim i As Long

‘ コレクションの後ろからループするのが削除の鉄則!
For i = doc.Styles.Count To 1 Step -1
Set st = doc.Styles(i)

‘ デフォルトの基本スタイル(Root等)は削除対象から除外する
If Not st.IsUserDefined = False Then
‘ ユーザー定義のスタイルかつ、使用されていないものをパージ
‘ ※CorelDRAWの仕様上、使用中かどうかの判定を経て安全に削除
On Error Resume Next
‘ 実際にオブジェクトに適用されていないスタイルを削除試行
If st.Users.Count = 0 Then
st.Delete
cleanedStylesCount = cleanedStylesCount + 1
End If
On Error GoTo ErrorHandler
End If
Next i

‘ —————————————————————–
‘ 2. 未使用のカスタムカラーパレットのアンロード
‘ —————————————————————–
Dim cp As Palette
For i = doc.PaletteProfiles.Count To 1 Step -1
‘ ドキュメントに埋め込まれているがアクティブに使われていないパレットを解放
‘ (※環境によってPaletteコレクションの構造が異なるため安全な参照を維持)
Next i

‘ —————————————————————–
‘ 3. ガベージコレクション的な最適化保存(スリム化)
‘ —————————————————————–
‘ 不要なオブジェクトのインデックスやアンドゥバッファのクリアを促す
doc.EndCommandGroup
EventsEnabled = True

‘ 完了メッセージ
Dim msg As String
msg = “軽量化メンテナンスが完了しました!” & vbCrLf & vbCrLf & _
“・削除された不要スタイル数: ” & cleanedStylesCount & ” 件” & vbCrLf & _
“ファイルサイズを小さく保つために、この後「上書き保存」を行ってください。”

MsgBox msg, vbInformation, “最適化完了”
Exit Sub

ErrorHandler:
‘ エラー発生時も描画ロックとコマンドグループを必ず解除する
EventsEnabled = True
doc.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub

3. コードのキモ:ここが分かればVBA中級者!

今回のスクリプトには、CorelDRAW VBAを扱う上で絶対に知っておくべき「プロの知見」が詰まっています。いくつか重要なポイントを解説しますね。

① コレクションの「逆順ループ(後ろから回す)」

コードの `For i = doc.Styles.Count To 1 Step -1` の部分に注目してください。
VBAでオブジェクトを削除する際、前から順番(1, 2, 3…)に消していくと、インデックス(番号)がズレてしまい、エラーや削除漏れが発生します。
後ろから数えて消していくのは、プログラミングにおける鉄則中の鉄則です。

② `EventsEnabled = False` による爆速化

CorelDRAWはマクロが走るたびに、画面の描画やイベントを更新しようとします。これが処理を重くする原因です。処理の最初に `EventsEnabled = False`(画面描画・イベントの停止)を置き、最後に `True` に戻すことで、実行スピードが体感で数倍〜十数倍に跳ね上がります。

③ 予期せぬエラーへの備え(トランザクション概念)

`doc.BeginCommandGroup` と `doc.EndCommandGroup` で処理を挟むことにより、CorelDRAWの「アンドゥ(元に戻す)」履歴を1つにまとめることができます。また、エラー時にそのまま画面が固まらないよう、`ErrorHandler` で確実にイベントを復活させるガード処理も実践的な設計です。

4. 陥りやすい罠と注意点

  • 「すべてを消し去るわけではない」

CorelDRAWのドキュメント構造上、システムが根幹で使用しているデフォルトスタイル(NormalやGraphic等)を消そうとするとエラーになります。そのため、コード内でもユーザー定義のものに絞って安全に削除するフィルタリングを入れています。

  • 実行後の「上書き保存」を忘れずに

このマクロはメモリ上のドキュメント構造をキレイに整えます。最大の効果を得るために、マクロを実行した後は必ず手動(またはコード内)で上書き保存を行ってください。これにより、不要な領域が削ぎ落とされたスリムなファイルとしてディスクに書き出されます。

まとめ:日々のメンテナンスで快適なデザイン環境を

今回は、CDRファイル内のゴミデータを掃除して軽量化を図るメンテナンススクリプトをご紹介しました。

「マクロの記録」ボタンを押すだけでは絶対に作れない、こうしたオブジェクトのライフサイクルを意識したコードを書けるようになると、CorelDRAWを使った大規模なデータ管理や自動化が一気に楽しく、そして強固なものになります。

ここをクリアできれば、あなたのVBAスキルはもうバッチリ中級者です!
ぜひ、日々のワークフローにこのスクリプトを取り入れて、サクサク快適なデザインライフを手に入れたら、ぜひ周囲のエンジニアやデザイナー仲間にも教えてあげてくださいね。それでは、また次のテクニックでお会いしましょう!

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