【現場の知恵】CorelDRAWの「線幅トラブル」をVBAで一掃!アウトライン化自動処理の極意
こんにちは。CorelDRAWの自動化の世界へようこそ。
現場で何千ものベクターデータを扱う際、避けて通れないのが「線幅(ストローク)の罠」です。
「画面上では綺麗なのに、縮小したら線だけ太く残ってデザインが潰れた」「印刷データに回したら線が消えた」……こんな悲劇を経験したことはありませんか?これらを防ぐ唯一の鉄則が「ストロークをオブジェクト(カーブ)に変換する」こと。
今回は、この退屈でミスが許されない作業をVBAで瞬殺する、プロのワークフローを伝授します。
—
1. なぜ「アウトライン化」が必要なのか?
CorelDRAWにおいて、線(Outline)はあくまで「属性」です。拡大縮小時に「オブジェクトと共に拡大」のチェックを忘れると、線幅は固定されたまま。これが印刷事故の温床です。
VBAを使えば、以下のメリットが手に入ります。
- ヒューマンエラーゼロ: 選択漏れやレイヤーのロック解除忘れがなくなる。
- 超高速処理: 100個のファイルも、コーヒーを淹れている間に完了する。
- データ構造の統一: 全ての図形が「パス」として確定するため、出力トラブルが激減する。
—
2. 現場で使える「ストローク変換」スクリプト
それでは、実際に動くコードを見てみましょう。マクロの記録では決して辿り着けない、実務に耐えうる堅牢なコードです。
Sub ConvertAllStrokesToObjects()
‘ エラーハンドリング:予期せぬ停止を防ぐ
On Error GoTo ErrHandler
Dim s As Shape
Dim sr As ShapeRange
‘ アクティブなドキュメントの全オブジェクトを対象にする
Set sr = ActivePage.Shapes.All
‘ 処理速度向上のための最適化
Optimization = True
EventsEnabled = False
‘ 順次処理
For Each s In sr
‘ 線を持っているオブジェクトのみを対象にする(フィルタリング)
If s.Outline.Type <> cdrNoOutline Then
‘ ConvertToCurvesメソッドでパス化
‘ これにより線が「塗り」を持つオブジェクトに変換される
s.Outline.ConvertToObjects
End If
Next s
‘ 最適化を解除して描画を更新
Optimization = False
EventsEnabled = True
ActiveWindow.Refresh
MsgBox “全オブジェクトの線幅変換が完了しました!”, vbInformation
Exit Sub
ErrHandler:
Optimization = False
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
コードの重要ポイントを解説
1. `Optimization = True`: これが伝説的なエンジニアへの第一歩です。画面の再描画を一時停止することで、処理速度が劇的に向上します。
2. `s.Outline.Type <> cdrNoOutline`: 線を持っていない図形まで無理に変換しようとすると、処理が重くなるだけでなく予期せぬエラーを招きます。先に「線があるか?」を確認するのがプロの流儀です。
3. `EventsEnabled = False`: ファイルを開いたり保存したりする際の「余計なイベント(警告ダイアログなど)」を無視させます。
—
3. 陥りやすい罠と解決策
初心者が必ずぶつかる壁と、その回避策を共有しておきます。
罠1:「グループ化」されたオブジェクト
上記コードはトップレベルのオブジェクトを対象にしていますが、グループの中に線がある場合は再帰処理(関数を自分で呼び出す処理)が必要です。もし複雑なグループ構造がある場合は、`s.UngroupAll` を先に行うか、グループ内を探索するロジックを追加しましょう。
罠2:テキストオブジェクトの扱い
テキストオブジェクトに対して `ConvertToObjects` を行うと、文字としての編集性が失われます。
- 対策: `If s.Type = cdrTextShape Then` で条件分岐し、テキストなら `s.ConvertToCurves` を使うなど、オブジェクトの型に応じた処理を書き分けるのが現場の鉄則です。
—
4. 次のステップへ:自動化エンジニアの視点
ここをクリアしたあなたなら、次はこんな機能を追加したくなるはずです。
- フォルダ内一括処理: `Dir` 関数を使って、特定のフォルダ内の全CDRファイルを自動で開き、このスクリプトを適用して保存して閉じる。
- ログ出力: どのファイルで処理に時間がかかったか、何個の線が変換されたかをテキストファイルに書き出す。
自動化は「楽をする」ためではなく、「ミスをゼロにして、創造的な仕事に集中する」ためにあります。
まずは、このスクリプトをあなたのCorelDRAWのVBAエディタ(`Alt + F11`)に貼り付けてみてください。動いた瞬間の感動こそが、エンジニアとしての第一歩です。
何か分からないことや、さらに高度な制御(PDF書き出しの自動化など)に興味があれば、またいつでも聞きに来てくださいね。応援しています!
