CorelDRAW VBAの深淵へ:ドキュメント内の全フォントを「一撃」で棚卸しする技術
こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの操作から一歩進み、自分自身でコードを記述する領域へ足を踏み入れる。これは、単なる作業の効率化を超えた、「CorelDRAWという巨大なエンジンを自分の意のままに操る」という創造的な旅の始まりです。
今回は、現場で最も需要の高い「ドキュメント内のフォント棚卸し」を題材に、CorelDRAW VBAの心臓部に触れていきましょう。
—
なぜ「フォント解析」が重要なのか?
印刷データを入稿する際、「フォントが埋め込まれていない」「意図しないフォントに置き換わっている」というトラブルは、現場のエンジニアにとって悪夢そのものです。
手作業で一つずつクリックして確認するのは、プロの仕事ではありません。「ドキュメント全体をスキャンし、使われているフォントをリスト化する」。この自動化コードさえ手元にあれば、あなたはいつでも数秒で安全確認を完了させることができます。
—
魔法のコード:フォントスキャナー
以下のコードをコピーして、VBAエディタ(`Alt + F11`)の標準モジュールに貼り付けてください。
Option Explicit
‘ ドキュメント内のすべてのテキストオブジェクトを走査し、フォント名を取得する
Public Sub ListAllUsedFonts()
Dim doc As Document
Dim shp As Shape
Dim fontNames As Collection
Dim fontName As Variant
‘ 現在のアクティブドキュメントを取得
Set doc = ActiveDocument
‘ 重複を許さないためにCollectionオブジェクトを使用
Set fontNames = New Collection
‘ ページ内の全シェイプを再帰的に探索
‘ CorelDRAWの階層構造(Layer -> Shape)を理解するのが重要
TraverseShapes doc.ActivePage.Shapes, fontNames
‘ イミディエイトウィンドウに結果を出力
Debug.Print “— 使用されているフォント一覧 —”
For Each fontName In fontNames
Debug.Print fontName
Next fontName
Debug.Print “— 終了 —”
End Sub
‘ 再帰関数:グループ化されたオブジェクトの中身まで掘り下げるための「鍵」
Private Sub TraverseShapes(shapes As Shapes, fontNames As Collection)
Dim shp As Shape
For Each shp In shapes
‘ もしシェイプがテキストオブジェクトなら
If shp.Type = cdrTextShape Then
On Error Resume Next ‘ 重複登録エラーを回避
fontNames.Add shp.Text.Story.Font, shp.Text.Story.Font
On Error GoTo 0
End If
‘ もしシェイプがグループなら、その中身を再帰的に探る
If shp.Type = cdrGroupShape Then
TraverseShapes shp.Shapes, fontNames
End If
Next shp
End Sub
—
コードの解説:ここが「CorelDRAW VBA」の肝
初心者が最初につまずくポイントを、エンジニアの視点で噛み砕きます。
1. なぜ「再帰処理(TraverseShapes)」を使うのか?
CorelDRAWのオブジェクトは、マトリョーシカのような「階層構造」を持っています。グループの中にグループがあり、さらにその中にテキストがある……という状況は日常茶飯事です。
`TraverseShapes` という自作関数が自分自身を呼び出すことで、どんなに深い階層にあるテキストも逃さず探し出すことができます。これが「オブジェクトのライフサイクルを理解する」という第一歩です。
2. `Collection` オブジェクトの活用
同じフォントが100箇所で使われていても、リストには1つだけ表示させたいですよね。`Collection`の「キーが重複するとエラーになる」という性質を逆手に取り、`On Error Resume Next` でさらりと重複を無視することで、スマートに一意のリストを作成しています。
3. イミディエイトウィンドウの確認方法
VBAエディタの画面下部にあるのが「イミディエイトウィンドウ(`Ctrl + G` で表示)」です。プログラムが「何を考え、何を見つけたか」を教えてくれる、エンジニアの対話窓です。ここを使いこなせるようになれば、デバッグのスピードが劇的に向上します。
—
陥りやすい罠と解決策
- 「テキストなのにフォント名が取れない?」
CorelDRAWには「芸術的テキスト」と「段落テキスト」があります。このコードは `shp.Text.Story.Font` を参照していますが、テキスト範囲内でフォントが混在している(一部だけ太字など)場合、このプロパティは期待通りに動かないことがあります。
- 改善案: 本格的な実務では `shp.Text.Story.Characters(1, 1).Font` のように、文字単位での走査が必要になる場合もあります。まずはこのコードで全体像を掴むことから始めましょう。
- グループ化されていないオブジェクトが見つからない?
`ActivePage.Shapes` はページ直下のシェイプしか見ません。レイヤーが複数ある場合は `doc.Layers` を走査するループが必要です。今回はシンプルにするためページに絞りましたが、ここを拡張するのが次のステップです。
—
最後に:あなただけの自動化を
このコードは、言わば「探知機」です。これを応用すれば、
- 特定のフォントが使われていたら警告を出す
- 自動的にフォントを置換して保存する
といった、「自分だけの時短ツール」へ進化させることができます。
CorelDRAW VBAは、あなたの指先一つで何千ものオブジェクトを瞬時に制御できる強力な武器です。まずはこのコードを動かし、イミディエイトウィンドウにフォントが並ぶ快感を味わってください。
ここをクリアしたあなたなら、次は必ずもっと高く飛べるはずです。応援していますよ。
