【CorelDRAW VBA】入稿事故をゼロにする「全テキストアウトライン化」完全自動化マニュアル
こんにちは。現場の最前線でCorelDRAWとVBAを使い倒しているエンジニアです。
「入稿データでフォントが化けた」「環境依存文字が消えた」……そんな悲劇に遭遇したことはありませんか? 印刷現場において、フォントの埋め込みトラブルはまさに「悪夢」です。
今回は、そんな事故を未然に防ぐための「全ページ・全テキストを一括アウトライン化(カーブに変換)」する自動化ツールを構築します。マクロの記録ボタンを押すだけでは到達できない、プロの領域へ一歩踏み出しましょう。
—
1. なぜ「手動」ではなく「VBA」なのか?
CorelDRAWの機能でアウトライン化は可能ですが、ページ数が増えたり、グループ化が複雑になったりすると、手作業では必ず「変換漏れ」が発生します。
VBAを使うメリットはただ一つ。「ヒューマンエラーの排除」です。
コードに処理を任せることで、どんなに複雑なデータでも同じ品質で処理を完了させることができます。
—
2. 核心となるロジック:再帰的処理の重要性
テキストは、単体で存在する場合もあれば、グループの中に埋もれている場合もあります。ここで初心者が陥りやすい罠が「階層構造を無視した探索」です。
全オブジェクトを走査するには、`ActivePage.Shapes` をループするだけでなく、グループ化された中身まで潜り込む「再帰的な思考」が必要です。今回はそれを踏まえた、現場でそのまま使える実装コードを提供します。
—
3. 実践コード:テキスト一括アウトライン化スクリプト
以下のコードをVBAエディタ(Alt+F11)の標準モジュールに貼り付けてください。
Option Explicit
‘ メイン処理:全ページを巡回してテキストをカーブに変換する
Sub ConvertAllTextToCurves()
Dim p As Page
Dim s As Shape
‘ CorelDRAWは処理中に描画を更新すると非常に重くなるため、これをオフにする
Optimization = True
‘ 全ページをループ
For Each p In ActiveDocument.Pages
p.Activate
‘ ページ内の全オブジェクトを再帰的に処理
ProcessShapes p.Shapes
Next p
‘ 処理終了後に描画を更新
Optimization = False
ActiveWindow.Refresh
MsgBox “すべてのテキストをアウトライン化しました!”, vbInformation
End Sub
‘ 再帰的にシェイプを走査する関数
Private Sub ProcessShapes(shapes As shapes)
Dim s As Shape
For Each s In shapes
‘ グループ化されている場合は中身を掘り下げる
If s.Type = cdrGroupShape Then
ProcessShapes s.UngroupEx.Shapes ‘ ここがプロのポイント:再帰呼び出し
‘ テキストオブジェクトであればカーブに変換
ElseIf s.Type = cdrTextShape Then
s.ConvertToCurves
End If
Next s
End Sub
—
4. コードの深掘り:なぜこの書き方なのか?
① `Optimization = True` の魔法
CorelDRAW VBAにおいて、これは「生命線」です。処理のたびに画面を再描画させると、マクロの速度が10倍以上低下します。必ず処理の前後で制御するようにしてください。
② `s.UngroupEx` と再帰
`s.Type` を判定し、グループであれば自分自身を再度呼び出す(再帰処理)。これにより、複雑に入れ子になったグループ内にあるテキストも、漏らさず全て捕獲できます。
③ 陥りやすいエラー:Locked(ロック)されたオブジェクト
もしデータ内にロックされたオブジェクトが含まれている場合、上記コードはエラーで停止します。実務では `If s.Locked = False Then` という条件分岐を加えておくと、より堅牢なツールになります。
—
5. 次のステップ:保存自動化への応用
このツールを応用すれば、「アウトライン化」の後に「PDF書き出し」を自動実行し、さらに「バックアップフォルダへ名前を変えて保存」するところまでを1クリックで完結させることが可能です。
VBAの学習は「まずは動くものを作る」ことから始まります。今回のアウトライン化ツールは、その第一歩として最適です。まずは自分の手元にある複雑なデータで試してみてください。
「自動化」は、単なる手抜きの道具ではありません。「自分自身がクリエイティブな作業に集中するための時間を生み出す装置」です。
これからも、CorelDRAWのポテンシャルを最大限に引き出していきましょう。応援しています!
