【入門編】【上級プロ向け】カスタムエクスポートフィルターの動的制御とサードパーティ製プラグイン連携の自動化 – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!日々のデザイン業務やデータ作成、本当にお疲れ様です。

CorelDRAWは非常に強力なベクターグラフィックツールですが、「何百枚ものデータを特定の仕様で一括書き出ししたい」「標準のエクスポートダイアログにはない、細かいパラメータを自動で制御したい」と思ったことはありませんか?

マクロの記録機能はとても便利ですが、記録されたコードは時に冗長で、ダイアログの裏に隠された高度なパラメータ(カラープロファイルの埋め込み制御や、特定のベクターパスの最適化など)まではコントロールできません。

今回は、一歩進んで「VBAのAPIを直接操り、カスタムエクスポートを自在にコントロールするプロの技術」を学びましょう!難しそうに見えるかもしれませんが、順を追って整理していけば大丈夫。「ここをクリアすれば、CorelDRAW VBAの基本はバッチリですよ」と胸を張って言えるポイントを、優しく丁寧に解説していきます。

1. CorelDRAWのエクスポート処理を「図解」で理解しよう

コードを書く前に、CorelDRAWの内部でエクスポートがどのように行われているか、イメージを掴んでおきましょう。

標準機能でエクスポートするとき、私たちはダイアログ画面(UI)でポチポチと設定を選びますよね。VBAでは、その画面の代わりに「構造体(Struct)」「フィルターオブジェクト」という透明な設定シートを使います。

[ CorelDRAWのドキュメント ]

▼ (1) エクスポート設定シート (StructExportOptions / StructPDFExportOptions)
[ 設定の書き込み ] ─── 例: 解像度は300dpi、テキストはカーブに変換、など

▼ (2) フィルターの呼び出し (ExportFilter)
[ 書き出しの実行 ] ─── 指定したファイル形式 (PDF, SVG, EPSなど) に変換

▼ (3) 外部連携 (パイプライン)
[ 外部ツールへ送信 ] ── コマンドライン経由でサードパーティ製ツールを実行

この流れをVBAコードで表現していきます。設定シートに必要なパラメータを書き込み、フィルターに渡してあげるだけ。仕組みさえ分かれば、実はとてもシンプルなんです。

2. 【実践】隠しパラメータを支配する高度なPDF/SVGエクスポート

まずは、もっとも実用性の高いPDFエクスポートを例に挙げてみましょう。
標準のUIでは隠れがちな「テキストのカーブ(アウトライン)化」や「カラープロファイルの強制適用」などを、VBAから直接制御します。

実装コード(コピペ&カスタマイズOK)

標準モジュールに以下のコードを貼り付けてみてください。重要なポイントにはすべてコメントを入れています。

Sub AdvancedCustomExport()
‘ — 1. エラーハンドリングと最適化の開始 —
‘ 処理中に画面がチラつかないようにし、実行速度を劇的に向上させます。
On Error GoTo ErrorHandler
Application.Optimization = True

Dim doc As Document
Set doc = ActiveDocument

If doc Is Nothing Then
MsgBox “アクティブなドキュメントが開かれていません。”, vbExclamation, “エラー”
Exit Sub
End If

‘ — 2. 出力パスの設定 —
‘ デスクトップに「Export_Result.pdf」という名前で出力します。
Dim desktopPath As String
desktopPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”)
Dim exportPath As String
exportPath = desktopPath & “\Export_Result.pdf”

‘ — 3. PDFエクスポート専用の設定シート(構造体)を作成 —
Dim pdfOptions As StructPDFExportOptions
Set pdfOptions = CreateStructPDFExportOptions()

‘ — 4. 隠しパラメータの動的制御(ここがプロの技!) —
With pdfOptions
‘ PDFのバージョンを「Acrobat 8.0 (PDF 1.7)」に設定
.Version = pdfVersion17

‘ テキストデータをすべて自動で「カーブ(アウトライン)」に変換してフォントトラブルを防止
.TextAsCurves = True

‘ カラーモードをCMYKに強制統一(印刷用の厳格なカラーマネジメント)
.ColorMode = pdfCMYK

‘ カラープロファイルをファイルに埋め込む
.EmbedProfiles = True

‘ 圧縮設定:ビットマップ画像の画質(最高画質)
.BitmapCompression = pdfJPEG
.JPEGQuality = 2 ‘ 2は最高品質(CorelDRAWの内部定数)

‘ トンボ(レジストレーションマーク)などの印刷用マークを非表示に
.BleedLimit = 0
.RegistrationMarks = False
End With

‘ — 5. フィルターを呼び出して実行 —
Dim expFilter As ExportFilter
‘ Document.PDFExporter を使用して、設定シートを適用しながら出力します
Set expFilter = doc.PublishToPDF(exportPath, pdfOptions)

‘ — 6. 完了通知 —
‘ 画面の最適化を元に戻します
Application.Optimization = False
Application.Refresh

MsgBox “高品質PDFのエクスポートが完了しました!” & vbCrLf & exportPath, vbInformation, “成功”
Exit Sub

ErrorHandler:
‘ 万が一エラーが起きても、画面の最適化を必ず解除して安全に終了します
Application.Optimization = False
Application.Refresh
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラーハンドリング”
End Sub

コードの解説と「マクロ記録」との違い

このコードの主役は `StructPDFExportOptions` です。
マクロ記録を行うと、アプリケーションの環境設定を直接書き換えてしまうコードが生成されがちですが、この方法では「このエクスポート処理のためだけの使い捨て設定シート」を作って処理しています。そのため、ユーザーが普段使っているCorelDRAWのデフォルト設定を汚すことがありません。

3. サードパーティ製ツール(コマンドライン)との強力な連携

CorelDRAWで出力したベクターデータを、さらにサードパーティ製の最適化ツール(例: SVGを軽量化する `SVGO` や、画像変換を行う `ImageMagick` など)に自動で引き渡したいことがありますよね。

VBAから外部プログラムを呼び出す際は、「外部ツールの処理が終わるまで、CorelDRAW側を一時停止して待つ」という制御が不可欠です。これを怠ると、ファイルが出力し終わる前に次の処理が進んでしまい、エラーの原因になります。

以下のコードは、Windowsのシェル機能を利用して、外部コマンドを「同期実行(処理待ち)」させる安全な連携パターンです。

Sub ExportAndExternalProcess()
Dim doc As Document
Set doc = ActiveDocument
If doc Is Nothing Then Exit Sub

‘ 1. 一時ファイルとしてSVGを出力
Dim tempPath As String
tempPath = Environ(“TEMP”) & “\temp_vector.svg”

Dim svgOptions As StructExportOptions
Set svgOptions = CreateStructExportOptions()
svgOptions.UseColorProfile = True

‘ SVGとしてエクスポートを実行
Dim filter As ExportFilter
Set filter = doc.ExportEx(tempPath, cdrSVG, cdrCurrentPage, svgOptions)
filter.Finish

‘ 2. 外部ツールの実行コマンドを組み立てる
‘ ※ここでは例として、コマンドプロンプトでファイルの存在を確認する擬似処理を行っています。
‘ 実際には、ImageMagickの「magick.exe input.svg output.png」などのパスを指定します。
Dim shellObj As Object
Set shellObj = CreateObject(“WScript.Shell”)

Dim exePath As String
Dim arguments As String
Dim command As String

‘ 例: コマンドプロンプトをバックグラウンドで起動し、一時ファイルを処理する
‘ 「/c」は実行後にウィンドウを閉じるオプションです
command = “cmd.exe /c echo Processing ” & tempPath

‘ 3. 【重要】同期実行(第3引数を「True」にすることで、外部処理が終わるまでVBAが待機します)
Dim windowStyle As Integer
windowStyle = 0 ‘ 0 = ウィンドウを非表示で実行

Dim waitOnReturn As Boolean
waitOnReturn = True ‘ 処理が終わるまで待つ

On Error Resume Next
shellObj.Run command, windowStyle, waitOnReturn
On Error GoTo 0

MsgBox “外部ツールとの連携処理が安全に完了しました!”, vbInformation, “連携成功”
End Sub

4. 初学者が陥りやすい「3つの罠」と回避策

CorelDRAW VBAの海に漕ぎ出すと、誰もが一度は遭遇する壁があります。でも、あらかじめ知っていれば怖くありません!

① 単位系(Unit)の罠

CorelDRAWは、ミリメートル、インチ、ピクセルなど、ドキュメントごとに異なる「単位」を持っています。
VBAのコード内で「幅 100」と指定したとき、ドキュメントの単位が「マイル」になっていたら、巨大なオブジェクトが生成されてフリーズしてしまいます。

  • 回避策: 値を設定する前に、必ず `ActiveDocument.Unit = cdrMillimeter` のように、コード側で基準とする単位を明示的に指定しましょう。

② `Application.Optimization` の戻し忘れ

画面更新を止める `Application.Optimization = True` は処理を劇的に高速化させますが、プログラムの途中でエラーが発生して途中で止まると、CorelDRAWの画面が一切動かなくなった(フリーズした)ように見えてしまいます

  • 回避策: 上述の実践コードのように、必ず `On Error GoTo ErrorHandler` を使い、エラーが発生した場合でも `Application.Optimization = False` を通るように設計してください。

③ オブジェクトの「不意な消滅(ライフサイクル)」

エクスポートフィルター (`ExportFilter`) やドキュメントオブジェクトは、処理が完了した瞬間にメモリから解放される必要があります。特にループ処理の中でこれらを何度も作成する場合、明示的に `Set expFilter = Nothing` と書いてメモリを解放してあげると、CorelDRAWが突然強制終了するトラブルを劇的に減らすことができます。

5. まとめ:マクロの記録から「創造」の領域へ

お疲れ様でした!
今回ご紹介したテクニックは、CorelDRAW VBAのなかでもかなり実戦的で、プロの現場で実際に使われているワークフローの心臓部です。

  • `StructPDFExportOptions` などの専用シートで隠しパラメータを直接制御する
  • `WScript.Shell` の同期実行を使って、外部ツールと安全にバトンタッチする

この2つの強力な武器を手に入れたあなたなら、単なる「作業の記録と再生」を超えて、自分だけのオリジナル自動化パイプラインを構築できるようになります。

最初はコピペから始めて、少しずつパラメータの数値を変えて実験してみてください。思い通りにファイルが自動生成されたときの感動は、何物にも代えがたいものです。

一歩一歩、楽しみながら進めていきましょう。あなたのデザイン業務が、自動化の力でもっとクリエイティブで楽しいものになることを応援しています!

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