【テクニカル・上級編】【初心者向け】指定フォルダ内のすべてのCDRファイルを巡回し、使用されているフォント名の一覧をCSVレポートに自動出力するフォント監査ツール – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAWフォント監査:レガシーの海を渡るための「非可視化」スキャン技術

入稿された数百のCDRファイル。それらを一つずつ開き、プロパティを確認してフォントをチェックする……。そんな「工数泥棒」な作業に、まだあなたの貴重な時間を割いているのか?

CorelDRAW VBAは、正しく扱えば強力な自動化の武器となる。しかし、無造作にコードを書けば、メモリリークの連鎖とCorelDRAWのフリーズという代償を支払うことになる。今日は、「ファイルを開かずに(あるいはバックグラウンドで最小限に)」フォントを横断抽出し、CSVに吐き出すプロフェッショナルなツールの設計思想を伝授する。

—

1. アーキテクチャの核心:なぜ「開かない」ことが重要なのか

CorelDRAWのオブジェクトモデルは、GUI(インターフェース)と密接に結合している。`Application.Open`を連発すれば、CorelDRAWは裏でレンダリングプロセスを走らせ、メモリを急速に食いつぶす。

今回の設計指針は以下の3点だ。
1. オブジェクトの完全な解放: `Nothing`代入だけでは足りない。COMインターフェースの参照カウントを意識する。
2. 非表示処理の徹底: `Application.Visible = False`は基本だが、それ以上に「描画更新の抑制」が鍵を握る。
3. 例外の隔離: 不正なファイルが混じっていた場合、プロセス全体を止めてはならない。

—

2. 極限のフォント監査エンジン

以下のコードは、指定フォルダ内の全CDRを走査し、使用フォントを辞書オブジェクトで集約する実装だ。

‘ 参照設定: Microsoft Scripting Runtime, CorelDRAW Type Library
Option Explicit

Public Sub AuditFontsInFolder()
Dim fso As Object, folder As Object, file As Object
Dim cdrApp As CorelDRAW.Application
Dim doc As CorelDRAW.Document
Dim fontDict As Object
Dim csvPath As String

Set fso = CreateObject(“Scripting.FileSystemObject”)
Set fontDict = CreateObject(“Scripting.Dictionary”)

‘ CorelDRAW本体の制御
Set cdrApp = New CorelDRAW.Application
cdrApp.Visible = False

‘ フォルダ走査
Dim folderPath As String
folderPath = “C:\InputData\”

For Each file In fso.GetFolder(folderPath).Files
If LCase(fso.GetExtensionName(file.Path)) = “cdr” Then
On Error Resume Next ‘ 不正ファイルでのクラッシュ回避
Set doc = cdrApp.OpenDocument(file.Path)

If Not doc Is Nothing Then
Call ExtractFonts(doc, fontDict)
doc.Close
Set doc = Nothing
End If
On Error GoTo 0
End If
Next

‘ 結果の出力(CSV)
Call ExportToCSV(fontDict, “C:\Report\FontAudit.csv”)

‘ プロセスの終了処理
cdrApp.Quit
Set cdrApp = Nothing
End Sub

Private Sub ExtractFonts(doc As CorelDRAW.Document, dict As Object)
Dim s As Shape
‘ 再帰的に全シェイプをスキャン(簡易版)
For Each s In doc.ActivePage.Shapes
If s.Type = cdrTextShape Then
Dim fontName As String
fontName = s.Text.Story.Font
If Not dict.Exists(fontName) Then dict.Add fontName, 1
End If
Next
End Sub

—

3. シニアエンジニアが押さえるべき「最適化」の真髄

上記のコードは氷山の一角に過ぎない。現場で生き残るための「深層」を語ろう。

メモリ管理の定石

`Set doc = Nothing` を呼んでも、VBAのガベージコレクションは即座にメモリを解放するとは限らない。もし大量のファイルを処理する場合、一定数(例えば50ファイルごと)に `DoEvents` を実行し、必要であればプロセスを一度再起動するような「自律的シャットダウン」機構を組み込むのが、大規模環境での安全策だ。

Windows APIによる制御

CorelDRAWがバックグラウンドで異常終了した場合、タスクマネージャーに `CorelDRW.exe` がゾンビとして残る。これを防ぐために、`FindWindow` や `TerminateProcess` といったWindows APIをラップし、スキャン開始時に前回のゾンビプロセスを強制終了させる防衛的コードを仕込むのが、真のプロの流儀だ。

ライセンス違反を未然に防ぐために

このスクリプトは単なるリスト出力機ではない。「社内指定フォントリスト(JSONや外部CSV)」と突合させる機能を加えることで、「許可されていないフォントが含まれている場合に警告ログを生成する」というゲートキーパーへと進化する。

—

4. 最後に:自動化とは「道具」ではなく「思想」である

ツールを作ることは簡単だ。しかし、システム管理者として重要なのは、「入稿データという非構造化データ」を「資産管理可能な構造化データ」へと昇華させることにある。

VBAはレガシーと言われる。だが、CorelDRAWのネイティブなAPIに直接触れられるのは、この「レガシーな」手段だけだ。この技術を使いこなせば、ベンダー依存のブラックボックスから脱却し、あなたのチームは真の生産性を手に入れることができる。

さあ、コードを書き換えろ。そして、退屈な手作業の時代に終止符を打つのだ。

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