【入門編】【中級者向け】印刷入稿用データの最終関門!全テキストオブジェクトのカーブ変換(アウトライン化)と未処理文字の自動検出アラート – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
今回は、実務の現場で最も恐れられているトラブルの一つ「フォント化けによる印刷ミスの完全防止」をテーマにお話しします。

「せっかく完璧なデザインを作ったのに、印刷所のPCにフォントが入っていなくてレイアウトが崩れた……」
こんな悪夢のような経験、ありませんか?これを防ぐ唯一にして最強の手段が、すべてのテキストをベクターパス(曲線)に変換する「アウトライン化(カーブ変換)」です。

今回は、ドキュメント内の全テキストを一網打尽にカーブ変換し、さらに「変換漏れ」がないかを二重チェックする、実務直結の自動化マクロを伝授します。ここをクリアすれば、あなたのVBAスキルは一段上のステージに到達しますよ!

—

なぜ「手動」ではなく「VBA」でやるべきなのか?

CorelDRAWでテキストを選択し、右クリックから「曲線に変換(Ctrl + Shift + Q)」をかければいいじゃないか——そう思いますよね。

しかし、現実はそう甘くありません。

  • 何十ページもあるパンフレット
  • ロックされたレイヤーの奥深くにある小さな注釈
  • シンボルやグループの中に埋もれたテキスト

これらを人間の目と手作業で探していたら、見落としが発生して当然です。プロのエンジニアなら、「機械でできることは機械にやらせる」。これが鉄則です。VBAを使えば、どんなに複雑な構造のドキュメントであっても、コンマ数秒で完璧なアウトライン化を実行できます。

—

現場で即戦力となる!全自動アウトライン化&チェックマクロ

それでは早速、実際のコードを見ていきましょう。
以下のコードをCorelDRAWのVBAエディタ(Alt + F11)に貼り付けて実行してください。

Sub ConvertAllTextToCurvesWithAlert()
‘ =========================================================================
‘ 印刷入稿用:全テキストのカーブ変換 & 未処理文字検出自動化マクロ
‘ Architect’s Note: オブジェクトのライフサイクルと再帰的走査を考慮した実装
‘ =========================================================================

Dim srText As ShapeRange
Dim totalConverted As Long
Dim remainingTextCount As Long

‘ エラーハンドリングの基本:予期せぬクラッシュを防ぐ
On Error GoTo ErrorHandler

‘ 1. アクティブドキュメントの存在確認
If ActiveDocument Is Nothing Then
MsgBox “処理対象のドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

‘ 2. ドキュメント内のすべてのテキストシェイプを一括取得
‘ FindShapes メソッドを使うことで、グループ内やレイヤーの深さを気にせず抽出可能
Set srText = ActiveDocument.Pages.FindShapes(Query:=”@type = ‘text’ AND not(@layer.locked)”)

totalConverted = srText.Count

If totalConverted = 0 Then
MsgBox “変換対象となるテキストオブジェクトは見つかりませんでした。”, vbInformation, “完了”
Exit Sub
End If

‘ 3. アンドゥ(操作の巻き戻し)グループの開始
‘ 大量のオブジェクトを操作するため、Ctrl+Z一回で元に戻せるようにする
ActiveDocument.BeginUndoGroup “テキストの一括アウトライン化”

‘ 4. 取得したテキストを一括でカーブに変換
‘ ConvertToCurvesメソッドはShapeRangeに対しても有効
Dim sh As Shape
For Each sh In srText
‘ アートisticテキストや段落テキストをすべてベクターパスへ
sh.ConvertToCurves
Next sh

‘ 5. 二重チェック:本当にすべてのテキストが消えたか(未処理文字の検出)
Dim srCheck As ShapeRange
Set srCheck = ActiveDocument.Pages.FindShapes(Query:=”@type = ‘text'”)
remainingTextCount = srCheck.Count

‘ 6. 結果の通知
ActiveDocument.EndUndoGroup

If remainingTextCount = 0 Then
MsgBox “全テキストのアウトライン化が正常に完了しました!” & vbCrLf & _
“変換されたオブジェクト数: ” & totalConverted & “個”, vbInformation, “入稿チェック:合格”
Else
‘ 残存している場合は警告を発する(ロックされたレイヤーや特殊なケース)
MsgBox “【警告】未処理のテキストが ” & remainingTextCount & ” 個残っています!” & vbCrLf & _
“ロックされたレイヤーやシンボル内にテキストがないか確認してください。”, vbExclamation, “入稿チェック:要確認”
End If

Exit Sub

ErrorHandler:
‘ 異常終了時のクリーンアップ
If Not ActiveDocument Is Nothing Then ActiveDocument.EndUndoGroup
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “致命的なエラー”
End Sub

—

コードの核心を解説:ここがプロの技

初心者から一歩抜け出すために、このコードの重要なポイントを3つに絞って解説します。

1. `FindShapes` クエリの圧倒的な威力

従来のVBAコードだと、ページをループし、レイヤーをループし、グループの中に入って……と、何重もの `For` 文を書く必要がありました(これを書くとコードが重くなり、バグの温床になります)。
しかし、CorelDRAWの `FindShapes(Query:=”…”)` を使えば、SQLのように一発で条件に合うオブジェクトの集合体(`ShapeRange`)をごっそり取得できます。これがパフォーマンスと保守性を爆発的に高める秘訣です。

2. 安全弁としての `BeginUndoGroup`

大量のデータを書き換えるマクロで最も怖いのは、「実行した後に取り返しがつかないこと」です。
`ActiveDocument.BeginUndoGroup` と `EndUndoGroup` で処理を挟むことで、マクロ全体の動作が「たった1回のCtrl+Z(元に戻す)」で完全にロールバックできるようになります。これは実務プログラミングの鉄則です。

3. 二重チェック(セーフティネット)の仕組み

優秀なエンジニアは「プログラムは失敗するもの」という前提でコードを書きます。
アウトライン化を実行した直後、あえてもう一度 `@type = ‘text’` で検索をかけ(`remainingTextCount`)、もし1つでもテキストが残っていれば「警告アラート」を出すようにしています。これにより、人為的ミスの完全排除を実現しています。

—

陥りやすい罠と注意点

最後に、このマクロを使う上での実務的な注意点をお伝えします。

  • テキストの編集ができなくなります

カーブ変換は「文字」から「図形(パス)」への一方通行です。一度実行して保存すると、二度と文字の打ち直しができなくなります。 必ず「入稿用データのコピー」に対してこのマクロを実行するようにしてください(元の編集用データは別に残すこと!)。

  • シンボル内のテキスト

CorelDRAWの「シンボル」として登録されているマスター内のテキストは、通常の検索から漏れることがあります。完全に網羅したい場合は、事前にシンボルをすべて「結合(分解)」しておくか、シンボル定義内を走査する拡張ロジックが必要になります。

—

おわりに

いかがでしたでしょうか?
今回は、実務で絶対に避けて通れない「テキストのアウトライン化と検証」をVBAで完全に自動化する方法を解説しました。

ここをクリアすれば、手作業による確認漏れや、印刷所からの「フォント化けエラー」の連絡におびえる日々から解放されます。ぜひ自分の開発環境に組み込んで、その爆速の処理を体感してみてください。

それでは、次回の極限の知見でお会いしましょう。あなたのCorelDRAWライフが、よりスマートで創造的になりますように!

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