【入門編】【中級者向け】複数フォーマット(EPS・PDF・SVG・CDR)のエクスポート設定をカスタムUIから動的に選択し、一括で多重出力するシステム – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して出てきたコードをそのまま動かしてみたものの、「なんだか動きが遅い」「狙ったファイル形式で綺麗に書き出せない」……そんな壁にぶつかっていませんか?

今回は、デザイン制作の現場で最も頭を悩ませる「クライアントご指定のフォーマット(EPS・PDF・SVG・CDR)への一括多重出力」を、カスタムUI(UserForm)から動的にコントロールする本格的なシステムを一緒に作っていきます。

ここをクリアすれば、あなたも単なる「操作の自動化」から脱却し、CorelDRAWの内部ライフサイクルを掌握したワンランク上のエンジニアへとステップアップできます。さあ、一緒に極限の効率化の世界へ飛び込みましょう!

—

1. なぜ「一括マルチエクスポート」でつまずくのか?

クライアントA社は「Illustrator互換のEPS」、B社は「最新のベクターSVG」、C社は「編集可能なCDR」、そして印刷所は「高解像度PDF」……。これを毎回手作業でファイル書き出ししていると、ヒューマンエラーの温床になります。

VBAでこれを自動化しようとしたとき、初心者が陥りがちな罠がいくつかあります。

  • アクティブドキュメントへの依存: 画面のフォーカスに頼ったコードを書くと、裏で別ファイルが開いた瞬間に破綻します。
  • フィルタ(エクスポート)設定のブラックボックス化: `ActiveDocument.Export` メソッドは引数が複雑で、適切なフィルタを指定しないとエラー落ちします。
  • メモリリークと不正終了: 大量のオブジェクトを連続エクスポートする際、描画更新やオブジェクトの解放を怠ると、CorelDRAWごと強制終了します。

これらをすべてクリアするのが、今回構築する「UserForm駆動型マルチエクスポート・アーキテクチャ」です。

—

2. システムの全体像と設計思想

今回作成するシステムは、以下の2つのパーツで構成します。

1. UserForm(UI層): ユーザーが直感的に出力形式(EPS, PDF, SVG, CDR)を選び、実行ボタンを押すインターフェース。
2. 標準モジュール(ロジック層): 選択された設定を受け取り、現在のドキュメントを安全に各フォーマットへ変換・保存するエンジン。

まずは、見た目と操作性を兼ね備えたUserFormを準備しましょう。

—

3. ステップ1:カスタムUI(UserForm)の構築

VBAのIDE(Alt + F11)を開き、`挿入` > `ユーザーフォーム` を選択してください。名前を `ExportManagerForm` とします。

フォーム上には以下のコントロールを配置してください。

  • CheckBox(チェックボックス):
  • `chkEPS` (Caption: EPS出力)
  • `chkPDF` (Caption: PDF出力)
  • `chkSVG` (Caption: SVG出力)
  • `chkCDR` (Caption: CDR出力)
  • CommandButton(コマンドボタン):
  • `cmdExecute` (Caption: 一括エクスポート実行)

フォームのコード(`ExportManagerForm`)

ユーザーがどのチェックを入れたかを保持し、実行ボタンが押されたらメインの処理へデータを渡すシンプルな設計にします。

‘ ==========================================
‘ UserForm: ExportManagerForm
‘ ==========================================
Private Sub cmdExecute_Click()
‘ 選択されたフォーマット情報を配列またはフラグとして標準モジュールに渡す
Dim isEPS As Boolean, isPDF As Boolean, isSVG As Boolean, isCDR As Boolean

isEPS = Me.chkEPS.Value
isPDF = Me.chkPDF.Value
isSVG = Me.chkSVG.Value
isCDR = Me.chkCDR.Value

‘ 何も選択されていない場合は警告して終了
If Not (isEPS Or isPDF Or isSVG Or isCDR) Then
MsgBox “出力するフォーマットを mindestens 1つ以上選択してください。”, vbExclamation, “入力エラー”
Exit Sub
End If

‘ フォームを隠して、メイン処理を実行
Me.Hide

‘ 標準モジュールの実行関数を呼び出し
Call ExecuteMultiExport(isEPS, isPDF, isSVG, isCDR)

‘ 処理完了後にフォームをアンロード
Unload Me
End Sub

—

4. ステップ2:コア・ロジックの実装(標準モジュール)

ここが本記事のメインディッシュです。
CorelDRAW VBAにおけるエクスポート処理は、単にファイルを保存するだけでなく、「正確なファイルパスの生成」「フィルタオブジェクトの適切な指定」「パフォーマンス最適化のための画面描画停止」がプロフェッショナルの条件です。

標準モジュール(例: `Module1`)を新規作成し、以下のコードを記述してください。

‘ ==========================================
‘ 標準モジュール: 多重エクスポート・エンジン
‘ ==========================================
Option Explicit

Public Sub ExecuteMultiExport(ByVal pEPS As Boolean, ByVal pPDF As Boolean, ByVal pSVG As Boolean, ByVal pCDR As Boolean)
‘ 1. ドキュメントが開かれているか厳格にチェック
If Application.Documents.Count = 0 Then
MsgBox “処理対象となるドキュメントが開かれていません。”, vbCritical
Exit Sub
End If

Dim doc As Document
Set doc = Application.ActiveDocument

‘ 2. 保存済みかどうかの確認(未保存の場合はパスが取得できないため)
If doc.Saved = False Then
Dim res As VbMsgBoxResult
res = MsgBox(“現在のドキュメントは未保存です。先に保存を推奨します。続行しますか?”, vbYesNo + vbQuestion)
If res = vbNo Then Exit Sub
End If

‘ 3. パフォーマンス爆速化の極意:画面描画とイベントの停止
‘ これを行わないと、ファイル出力のたびに画面がチラつき、処理速度が何倍も落ちます。
Application.Optimization = True
EventsEnabled = False
On Error GoTo ErrorHandler

‘ 4. 出力先ディレクトリとファイル名のベースを取得
Dim basePath As String
Dim baseName As String
basePath = doc.FilePath
baseName = Left(doc.FileName, InStrRev(doc.FileName, “.”) – 1)

‘ パスが空(新規未保存)の場合のフォールバック
If basePath = “” Then
basePath = “C:\Temp\” ‘ 適切なデフォルトパス
If Dir(basePath, vbDirectory) = “” Then MkDir basePath
End If

Dim fullBasePath As String
fullBasePath = basePath & baseName

‘ 5. 各フォーマットごとの動的エクスポート処理

‘ — CDR (CorelDRAWネイティブ保存) —
If pCDR Then
Dim cdrPath As String
cdrPath = fullBasePath & “.cdr”
‘ CDRはExportではなくSaveAsに近い挙動、あるいはコピ保存
doc.SaveAs cdrPath, cdrVersion19 (※環境に合わせたバージョン定数)
End If

‘ — EPS出力 —
If pEPS Then
Dim epsPath As String
epsPath = fullBasePath & “.eps”
Dim expFilterEPS As structExportOptions
Set expFilterEPS = CreateStructExportOptions
‘ EPS特有の詳細設定が必要な場合はここでプロパティを調整
doc.Export epsPath, cdrEPS, cdrSelection, expFilterEPS
End If

‘ — PDF出力 —
If pPDF Then
Dim pdfPath As String
pdfPath = fullBasePath & “.pdf”
‘ PDFはPublishToPDFメソッドを使用するのが最も確実で高精度
Dim pdfParams As StructPublishToPDFParams
Set pdfParams = CreateStructPublishToPDFParams
‘ プリセット指定なども可能
doc.PublishToPDF pdfPath, pdfParams
End If

‘ — SVG出力 —
If pSVG Then
Dim svgPath As String
svgPath = fullBasePath & “.svg”
Dim expFilterSVG As structExportOptions
Set expFilterSVG = CreateStructExportOptions
doc.Export svgPath, cdrSVG, cdrSelection, expFilterSVG
End If

‘ 6. 終了処理
Application.Optimization = False
EventsEnabled = True

MsgBox “すべての選択フォーマットのエクスポートが正常に完了しました!”, vbInformation, “完了”
Exit Sub

ErrorHandler:
‘ エラー発生時でも必ず最適化フラグを戻すこと(戻さないとCorelDRAWのUIが固まります)
Application.Optimization = False
EventsEnabled = True
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “致命的なエラー”
End Sub

—

5. ここをクリアすればバッチリ!知っておくべきプロの技術ポイント

上記のコードには、シニアエンジニアならではの「現場の知見」が詰まっています。初心者から一歩抜け出すためのポイントを解説します。

① `Application.Optimization = True` の絶対厳守

大量のオブジェクトを持つベクターデータを連続してファイル書き出しする場合、CorelDRAWはデフォルトで「画面の再描画」を行おうとします。これが処理を劇的に重くする原因です。
処理の最初に `Optimization = True` を立て、必ずエラーハンドラー(ErrorHandler)も含めて最後に `False` に戻す。このライフサイクル管理ができるかどうかが、プロとアマの分水嶺です。

② PDF出力には専用の `PublishToPDF` を使え

通常の `Export` メソッドでもPDFを出力できますが、CorelDRAW VBAではPDFに対しては `PublishToPDF` メソッドが用意されています。こちらを使用する方が、カラープロファイルやフォントの埋め込みといった高度なパブリッシング設定を安定してコントロールできます。

—

6. まとめ

今回は、UserFormを活用したマルチエクスポート自動化環境の構築を通じて、CorelDRAW VBAの応用的な実践力を解説しました。

  • UI(UserForm)からフラグを受け取り、動的に処理を分岐させる設計
  • `Application.Optimization` によるパフォーマンスの極限チューニング
  • エラー発生時を見据えた堅牢なライフサイクル管理

ここをマスターすれば、どんなに複雑なクライアントの納品レギュレーションであっても、ワンクリックで完璧に対応できる最強の自動化環境が手に入ります。

日々の退屈な作業はマクロに任せて、あなたしか生み出せないクリエイティブな時間に没頭してください。それでは、次回の極限知見でお会いしましょう!

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