CorelDRAW VBAを掌握する:メタデータ一括更新で「管理の闇」から脱却せよ
こんにちは。CorelDRAWの自動化の世界へようこそ。
普段、何百もの`.cdr`ファイルを一つずつ開き、「ファイル」>「ドキュメントのプロパティ」を開いて著者名やキーワードを手入力していませんか?
その作業、CorelDRAW VBAにとっては「瞬き」にも満たない時間で終わるルーチンワークです。
今回は、単なるコードのコピペではなく、「なぜそのオブジェクトを操作するのか」「メモリを食いつぶさないためにはどうすべきか」という、プロのアーキテクトが意識している核心部分を伝授します。マクロの記録ボタンを押すだけの卒業証書を、今日で受け取りましょう。
—
1. CorelDRAWのオブジェクトモデルを支配する「3層構造」
CorelDRAWのVBAを理解するには、まずこの3つの階層を頭に叩き込んでください。
- Application(頂点): CorelDRAWそのもの。`Application` または `CorelDRAW.Application` でアクセスします。
- Document(作業場): 現在開いているファイル。`ActiveDocument`がこれに当たります。
- Property(情報): 今回のターゲット。`Document`オブジェクトが持つメタデータ領域です。
これらを意識するだけで、「どのオブジェクトを触っているのか分からない」という迷子状態から完全に脱出できます。
—
2. 実践:メタデータ一括書き換えツール
今回は、指定したフォルダ内の全`.cdr`ファイルに対して、著者(Author)、件名(Subject)、キーワード(Keywords)を一括で書き換えるプロフェッショナルなスクリプトを提供します。
準備:参照設定について
このスクリプトは、VBAエディタの「ツール」>「参照設定」で、対象のCorelDRAW Type Libraryにチェックが入っていることが前提です。
Option Explicit
‘ メタデータを一括更新するメインプロシージャ
Sub BatchUpdateMetadata()
Dim fso As Object
Dim folderPath As String
Dim folder As Object
Dim file As Object
Dim doc As Document
‘ 処理対象のフォルダを指定(適宜書き換えてください)
folderPath = “C:\Projects\DesignFiles\”
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(folderPath)
‘ エラーハンドリング:ファイルが開けなかった場合の暴走を防ぐ
On Error Resume Next
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Name)) = “cdr” Then
‘ ドキュメントを開く(Visible:=Falseで背後で処理させるのが高速化の秘訣)
Set doc = Application.OpenDocument(file.Path)
‘ メタデータの更新
With doc.SummaryInfo
.Author = “株式会社〇〇 デザイン部”
.Subject = “2024年度版 クライアント納品物”
.Keywords = “ロゴ, ベクター, 最終稿”
End With
‘ 上書き保存して閉じる
doc.Save
doc.Close
End If
Next file
MsgBox “メタデータの更新が完了しました!”, vbInformation
End Sub
—
3. なぜこのコードが「現場レベル」なのか?(極限の知見)
このコードには、ただ動くだけではない「プロの作法」が隠されています。
① `Visible:=False` の重要性
`Application.OpenDocument` の際、画面に表示させずに裏で開くことで、描画コストをゼロにします。これを怠ると、ファイルを開くたびに画面が激しく点滅し、数倍の時間がかかります。自動化とは、「いかに画面を操作させないか」が勝負なのです。
② `SummaryInfo` オブジェクトへのアクセス
CorelDRAWのメタデータは `Document.SummaryInfo` という専用オブジェクトにカプセル化されています。プロパティを直接いじるのではなく、このオブジェクトを介することで、CorelDRAW側の整合性を保ったまま安全に書き込みが可能です。
③ エラーハンドリングの罠
`On Error Resume Next` を使用していますが、これは「どんなエラーも無視する」という意味ではありません。大量処理中に一つでも壊れたファイルがあるとプログラム全体がクラッシュするのを防ぐための「現場の防波堤」です。
—
4. 陥りやすいエラーとその克服法
- 「オブジェクトが取得できません」というエラー:
これは多くの場合、パスが間違っているか、ファイルが現在他の人によって開かれている(ロックされている)ことが原因です。`If Not doc Is Nothing Then` というチェックを入れ、開けなかったファイルをログに残す仕組みを作ると、より堅牢なツールになります。
- 「メモリ不足」:
1000ファイル以上の処理を行う場合、`doc.Close` をした後に `DoEvents` を入れたり、`Set doc = Nothing` で明示的にメモリを解放する癖をつけましょう。
—
次のステップへ
どうですか?「マクロの記録」では決して到達できない、プログラムによるファイルの「支配」ができたはずです。
今回のメタデータ書き換えは自動化の入り口に過ぎません。今後は「レイヤー名の正規化」や「特定のカラーパレットの強制削除」など、より高度な操作へ進んでいくことができます。
CorelDRAWの自動化は、あなたの「退屈な作業時間」を「創造的なデザインの時間」に変える魔法です。ぜひ、このコードをベースに自分好みの最強ツールへと育て上げてください。
応援しています。困ったときは、またいつでも聞きに来てくださいね。
