【入門編】【中級者向け】デザイン入稿前の必須チェック!全テキストのアウトライン化(カーブ変換)を実行し未変換の文字列を検知してアラートを出すマクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

【CorelDRAW VBA道場】入稿事故をゼロに!全テキストを「一瞬で」アウトライン化&未変換検知マクロ

こんにちは。CorelDRAWの自動化を極めるエンジニアです。

印刷入稿の直前、ヒヤリとした経験はありませんか?「あ、あの見出しフォント、アウトライン化し忘れてた……」というミス。手作業で全ページ確認するのは時間の無駄ですし、何より人間はミスをする生き物です。

今回は、マクロの記録を卒業し、「CorelDRAWの内部構造を制御する」ための第一歩として、テキストのアウトライン化と、変換漏れを許さないバリデーション(検証)機能を備えたプロ仕様のマクロを伝授します。

1. なぜ「ConvertCurves」だけでは不十分なのか?

初心者のうちは、単に `ActivePage.Shapes.All.ConvertToCurves` を呼び出して満足しがちです。しかし、現場で求められるのは「本当にすべて変換されたか?」を証明するプロセスです。

CorelDRAWのオブジェクトモデルにおいて、テキストは「テキストフレーム」として存在し、変換されると「カーブ」という別のデータ構造に置き換わります。この変換の隙間に潜む「変換失敗」や「ロックされたレイヤーの無視」といった罠を、どう回避するかがエンジニアの腕の見せ所です。

2. 現場で使える!全自動アウトライン化&チェックマクロ

このコードは、ドキュメント内の全ページ・全レイヤーを走査し、テキストオブジェクトを強制的にカーブへ変換します。処理後に、万が一「まだテキストが残っていないか」を再検索する二段構えの構造です。

Sub ForceOutlineAllTexts()
Dim doc As Document
Dim p As Page
Dim s As Shape
Dim textCount As Long

Set doc = ActiveDocument
textCount = 0

‘ プロセスを高速化するために更新を停止(重要テクニック)
Optimization = True

‘ 全ページをループ
For Each p In doc.Pages
p.Activate
‘ ページ内の全オブジェクトを走査
For Each s In p.Shapes
‘ オブジェクトがテキストタイプか判定
If s.Type = cdrTextShape Then
‘ アウトライン化(カーブ変換)を実行
s.ConvertToCurves
End If
Next s
Next p

‘ — ここからがプロのバリデーション —

‘ 変換後にまだテキストが残っているか再検索
For Each p In doc.Pages
For Each s In p.Shapes
If s.Type = cdrTextShape Then
textCount = textCount + 1
End If
Next s
Next p

‘ 結果報告
Optimization = False
ActiveWindow.Refresh

If textCount > 0 Then
MsgBox “【警告】変換漏れが ” & textCount & ” 個見つかりました。” & vbCrLf & _
“ロックされたレイヤーや、特殊なグループ内を確認してください。”, vbCritical, “プリプレスチェック”
Else
MsgBox “成功:すべてのテキストをカーブに変換しました!”, vbInformation, “入稿準備完了”
End If
End Sub

3. コードの心臓部を読み解く

このコードを理解すれば、他の自動化も自在になります。ポイントは3つです。

① `Optimization = True` の魔法

CorelDRAW VBAは、実行するたびに画面を再描画しようとします。数千のオブジェクトを処理する際、この再描画が最大のボトルネックになります。`Optimization = True` にすることで、裏側だけで計算を完結させ、処理速度を劇的に向上させます。

② `s.Type = cdrTextShape` による判定

CorelDRAWには様々なオブジェクトがあります。`cdrTextShape` は「テキスト」を表す定数です。これを利用することで、カーブやビットマップを誤って変換しようとする無駄な処理を回避し、コードの安全性を高めています。

③ なぜ二段構えにするのか?

プログラミングの世界では「想定外の例外」が必ず発生します。例えば、「ロックされたレイヤー内にあるテキスト」は、単純なループでは変換に失敗することがあります。最後に「まだテキストはあるか?」と聞き直すことで、ヒューマンエラーをシステムが補完するのです。

4. 次のステップへ:さらなる高みを目指すなら

このマクロを使えるようになったあなたは、もう初学者ではありません。次なるステップとして、以下のような拡張に挑戦してみてください。

  • グループ化の解除: グループの中にあるテキストも確実に変換できるように、再帰的(Recursive)な検索関数を組み込む。
  • ログ出力: 変換できなかったオブジェクトの座標をテキストファイルに出力する。
  • プリセット化: 複数のドキュメントを連続処理できる「バッチ処理」へ進化させる。

CorelDRAWの自動化は、単なる「作業の短縮」ではなく、「品質の担保」そのものです。あなたが書いたコードが、誰かのミスを未然に防ぐ――それがエンジニアの価値です。

これからも、CorelDRAW VBAの世界を一緒に深掘りしていきましょう。何か不明点があれば、いつでも聞いてくださいね。応援しています!

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