【入門編】【初心者向け】指定フォルダ内の全CDRファイルから特定の文字列やレイヤー名を自動検索する簡易監査ツール – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
私はこれまで数々の現場でデザインの自動化やワークフローの高速化を手がけてきましたが、今回は「マクロの記録」から一歩抜け出して、実務で今すぐ使える「ファイルを開かずにCDRファイルを監査するツール」の作り方を解説します。

「大量のCDRファイルの中から、特定のレイヤー名やテキストが含まれているファイルを一発で見つけたい……」
そんな面倒な作業、手動でやっていませんか?

今回は、ファイルを開くという重い処理をせず、CorelDRAWの裏側の仕組み(メタデータ)をスマートに覗き見する、初心者向けでありながらプロの知見が詰まったプログラムを一緒に作っていきましょう。ここをクリアすれば、あなたのCorelDRAW VBAのスキルは間違いなくワンステージ上がりますよ。

なぜ「ファイルを開かない」ことが重要なのか?

業務で何百個ものCDRファイルを処理する時、すべてのファイルを開いて(`Open`メソッドを使って)中身を確認しようとすると、どうなるでしょうか?

  • 画面がパカパカと切り替わり、処理が恐ろしく遅い。
  • メモリ不足でCorelDRAWが突然フリーズする。
  • 処理中に余計なダイアログが出て止まってしまう。

CorelDRAW VBAにおいて、「画面を描画させない」「不要なファイルを開かない」というのは、実務で生き残るための基本中の基本です。しかし、実はCDRファイルは一種のZIPアーカイブ(内部にメタデータやXMLを持っている)構造を持っています。

とはいえ、今回は初心者向けとして、もっと手軽かつ確実に、CorelDRAWのエンジンを賢く使って「指定フォルダ内を巡回する」アプローチを取ります。

今回作るツールの仕様

1. ユーザーが指定したフォルダの中にあるすべての `.cdr` ファイルを対象にする。
2. 各ファイルの中に、特定の「レイヤー名」「文字列」が含まれているかをチェックする。
3. ヒットしたファイル名を、VBAのイミディエイトウィンドウ(またはExcelのようなリスト)に出力する。

実装コード:フォルダ一括スキャン・監査ツール

以下のコードを、CorelDRAWのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてください。

Sub AuditCDRFiles()
‘ — 変数の宣言 —
Dim fso As Object
Dim targetFolder As Object
Dim fileItem As Object
Dim folderPath As String
Dim searchKeyword As String
Dim doc As Document
Dim foundCount As Long

‘ 【設定】検索したいレイヤー名やテキストを指定してください
searchKeyword = “ロゴ” ‘ 例:「ロゴ」という名前のレイヤーを探す

‘ 【設定】監査したいフォルダのパスを指定してください(最後は必ず「\」で終わる)
folderPath = “C:\MyDesignFiles\”

‘ フォルダが存在するかチェック
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(folderPath) Then
MsgBox “指定されたフォルダが存在しません:” & vbCrLf & folderPath, vbCritical, “エラー”
Exit Sub
End If

Set targetFolder = fso.GetFolder(folderPath)

‘ 処理中の画面描画を停止し、爆速化する(プロの必須テクニック!)
EventsEnabled = False
CorelDRAW.Optimization = True

foundCount = 0
Debug.Print “=== 監査開始: ” & Now & ” ===”

‘ フォルダ内の全ファイルをループ処理
For Each fileItem In targetFolder.Files
‘ 拡張子が「.cdr」または「.CDR」のものだけを対象にする
If LCase(fso.GetExtensionName(fileItem.Name)) = “cdr” Then

On Error GoTo ErrorHandler ‘ エラーハンドリング(破損ファイル対策)

‘ 【重要】画面を見せずに裏側でファイルを開く(OpenDocumentSilentを使用)
Set doc = OpenDocumentSilent(fileItem.Path)

‘ ファイル内の要素をチェックする関数を呼び出す
If CheckElementInDocument(doc, searchKeyword) Then
Debug.Print “【ヒット】: ” & fileItem.Name
foundCount = foundCount + 1
End If

‘ 変更を保存せずに閉じる(メモリリークを防ぐための鉄則)
doc.Close
Set doc = Nothing

End If
NextFile:
Next fileItem

‘ 終了処理
CorelDRAW.Optimization = False
EventsEnabled = True

Debug.Print “=== 監査終了 (ヒット数: ” & foundCount &件) == ”
MsgBox “監査が完了しました!結果をイミディエイトウィンドウで確認してください。”, vbInformation, “完了”
Exit Sub

ErrorHandler:
‘ 破損ファイルなどで開けなかった場合のエラー処理
Debug.Print “【スキップ(エラー)】: ” & fileItem.Name & ” (理由: ” & Err.Description & “)”
If Not doc is Nothing Then
doc.Close
Set doc = Nothing
End If
Resume NextFile

End Sub

‘ — ドキュメント内を走査するヘルパー関数 —
Function CheckElementInDocument(targetDoc As Document, keyword As String) As Boolean
Dim lyr As Layer
Dim sh As Shape
Dim isFound As Boolean

isFound = False

‘ 1. すべてのページのレイヤー名をチェック
Dim p As Page
For Each p in targetDoc.Pages
For Each lyr In p.Layers
If InStr(1, lyr.Name, keyword, vbTextCompare) > 0 Then
isFound = True
Exit Function
End If
Next lyr
Next p

‘ 2. (応用)シェイプ内のテキストもチェックしたい場合はここに処理を追加できます
‘ (今回はシンプルにレイヤー名検索をメインにしています)

CheckElementInDocument = isFound
End Function

コードの注目ポイント(先輩エンジニアからのアドバイス)

このコードには、現場で培った「トラブルを防ぐための知見」がいくつか盛り込まれています。

1. `OpenDocumentSilent` の活用

通常の `OpenDocument` を使うと、ファイルが開くたびにCorelDRAWの画面がチラついたり、フォント置き換えの警告ダイアログでマクロがストップしてしまいます。`OpenDocumentSilent` を使うことで、「画面を一切描画せずにバックグラウンドで開く」ことができ、処理速度が何倍にも跳ね上がります。

2. 爆速化の呪文:`Optimization = True`

処理の最初に `CorelDRAW.Optimization = True` を宣言し、最後に `False` に戻しています。これを行うことで、CorelDRAWの画面再描画やプレビュー生成が一時停止され、大量のファイルを処理する際のパフォーマンスが劇的に向上します。

3. 鉄壁のエラーハンドリング (`On Error GoT0`)

業務用のファイル群には、「中身が破損していて開けないファイル」「古いバージョンの特殊なファイル」が必ずと言っていいほど混ざっています。ここでエラー対策をしておかないと、1万個あるファイルの9999個目でマクロが強制終了し、絶望的な気分になります。
エラーが起きたら該当ファイルをスキップして次のファイルへ進む(`Resume NextFile`)構造が、プログラミングの命綱となります。

実行結果の確認方法

コードを実行したら、VBAエディタの下部にある「イミディエイト ウィンドウ」(表示されていない場合は `Ctrl + G` で表示)を開いてみてください。

次のように、条件に一致したファイル名がログとして出力されていれば大成功です!

=== 監査開始: 202X/XX/XX XX:XX:XX ===
【ヒット】: product_A_rev2.cdr
【ヒット】: campaign_logo_master.cdr
【スキップ(エラー)】: broken_file.cdr (理由: ファイルを読み込めません)
=== 監査終了 (ヒット数: 2件) ===

ここをクリアすれば、CorelDRAW VBAの基本はバッチリ!

いかがでしたでしょうか?
「フォルダの中身をループで回す」「バックグラウンドでファイルを開閉する」「エラーを華麗にかわす」という、業務自動化の必須要素がこの短いコードにすべて詰まっています。

まずはご自身のPCの適当なテストフォルダとファイルで試してみて、コードのどの部分がどう動いているのかを体感してください。このツールをベースに、「特定の色が含まれているか調べる」「テキストの内容を置換して別名保存する」といった拡張を加えていけば、あなたの毎日のルーワークは驚くほど軽くなりますよ。

それでは、快適なCorelDRAW自動化ライフを!

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