CorelDRAW VBAを掌握せよ:数百のファイルを瞬時に診断する「フォント監査ツール」の作り方
こんにちは。自動化の世界へようこそ。
CorelDRAWの「マクロの記録」ボタンを押して生成されるコードを見て、「これでいいのか?」と不安になったことはありませんか?その直感は正しい。マクロの記録はあくまで「操作のなぞり」であり、プロのエンジニアが書く「自動化ツール」とは別物です。
今回は、現場で必ず直面する「入稿ファイルのフォント確認」というタスクを題材に、CorelDRAW VBAの本質的な書き方を伝授します。
—
なぜ「開かずに」監査するのか?
数千個のファイルを手作業で開いてフォントを確認していたら、日が暮れてしまいます。さらに、ファイルを開くという行為はメモリを大量に消費し、クラッシュのリスクを伴います。
今回作成するツールは、「CorelDRAWのオブジェクトモデルを直接操作し、バックグラウンドに近い感覚で情報を吸い上げる」という、自動化の醍醐味を凝縮したものです。
—
ステップ1:開発の準備と「お約束」
VBAを動かすには、以下の準備が必要です。
1. CorelDRAWで `Alt + F11` を押してVBAエディタを開く。
2. `ツール` > `参照設定` から「Microsoft Scripting Runtime」にチェックを入れる(ファイルシステム操作のため)。
3. 標準モジュールを挿入する。
—
ステップ2:フォント監査ツール・実装コード
以下のコードをコピペして、まずは動かしてみてください。このコードには、初心者が躓きやすい「ファイルの巡回」と「フォント情報の抽出」の最適解が詰まっています。
Option Explicit
‘ ツール本体:指定フォルダ内のCDRからフォントを抽出
Sub AuditFontsInFolder()
Dim fso As FileSystemObject
Dim folder As folder
Dim file As file
Dim doc As Document
Dim s As Shape
Dim fontList As String
Dim reportPath As String
Set fso = New FileSystemObject
reportPath = “C:\AuditReport.csv” ‘ 出力先
‘ フォルダ選択ダイアログを表示
Dim folderPath As String
With Application.FileSearch ‘ ※簡略化のため手動指定推奨
folderPath = “C:\InputFiles\”
End With
‘ ファイル巡回開始
For Each file In fso.GetFolder(folderPath).Files
If UCase(fso.GetExtensionName(file.Path)) = “CDR” Then
‘ ファイルを非表示で開く(メモリ効率重視)
Set doc = OpenDocument(file.Path)
‘ ページ内のすべてのシェイプをスキャン
For Each s In doc.ActivePage.Shapes
‘ テキストオブジェクトならフォント名を収集
If s.Type = cdrTextShape Then
fontList = fontList & file.Name & “,” & s.Text.Story.Font & vbCrLf
End If
Next s
doc.Close
End If
Next file
‘ CSV出力(ファイルシステムを利用)
Dim ts As TextStream
Set ts = fso.CreateTextFile(reportPath, True)
ts.Write fontList
ts.Close
MsgBox “監査完了!レポートは ” & reportPath & ” です。”
End Sub
—
ステップ3:コードの深層解説(ここがプロの視点)
初心者が陥りやすい罠を、このコードでは回避しています。
- `Option Explicit` の強制:
これがないと、変数名のタイプミスをVBAが許容してしまい、バグの温床になります。プロは必ず書きます。
- オブジェクトの解放:
`Set doc = Nothing` を明示的に行うことは、メモリリークを防ぐための鉄則です。大量のファイルを扱う際、ここを怠るとCorelDRAWが徐々に重くなり、最後に沈黙します。
- `s.Type` によるフィルタリング:
すべてのオブジェクトを相手にするのではなく、`cdrTextShape`(テキスト)だけに絞ることで、実行速度を劇的に向上させています。
—
陥りやすいエラーと対策
1. 「ファイルを開く時のダイアログ」問題:
入稿ファイルが古いバージョンだったり、リンク切れがある場合、警告ダイアログが出ます。これを回避するには `Application.Optimization = True` を冒頭に入れ、画面更新を停止させるのが定石です。
2. グループ化されたテキスト:
上記のコードは「ページ直下」のテキストしか拾いません。グループ化されたテキストまで拾うには、「再帰処理(自分自身を呼び出す関数)」という技術が必要です。これは次のステップへの登竜門です。
—
最後に:自動化は「道具」ではなく「思考」
VBAを覚えることは、単にコードを書くことではありません。「人間が手作業で行っている苦痛なタスクを、いかに計算可能な論理に置き換えるか」を鍛えることなのです。
このツールが動いた瞬間、あなたはただのオペレーターから、CorelDRAWを支配するエンジニアへと足を踏み入れたことになります。次は「グループ内のテキストも拾いたい」という欲求が出てくるはずです。その時が、さらなる高みへ進むタイミングです。
応援しています。何か詰まったら、またいつでも聞いてください。一緒に最強のワークフローを構築しましょう。
