こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身は何をしているのかサっぱり……」という段階を卒業し、いよいよ自分の手でデザインの自動化をコントロールしたい中級者のあなたへ。
今回は、実務の現場で最もリクエストが多い「1つのマスターデザインから、EPS・PDF・SVG・CDRといった複数フォーマットへ同時にマルチエクスポートする仕組み」を徹底解説します。
ここをクリアすれば、手作業で「名前を付けて保存」を何回も繰り返す苦行から完全に解放されます。さあ、一緒にプロの自動化エンジニアへの階段を登っていきましょう!
—
なぜ「マルチエクスポート」でつまずくのか?
クライアントや印刷所、Web制作チームなど、納品先によって求められるファイル形式はバラバラです。
- CDR: 自社のマスター保存用
- EPS: 古い印刷所や特殊な断裁機用
- PDF: 現在の一般的な印刷入稿用
- SVG: WebサイトやUIデザイン用
これを手作業ですると、フォーマットごとにオプション設定を間違えたり、保存し忘れたりするヒューマンエラーが必ず発生します。
「じゃあ、VBAで一気に書き出そう!」と思ったとき、多くの人が最初に直面するのが、「CorelDRAWの各フィルター(フィルタクラス)のクセと、出力オプションの指定方法の複雑さ」です。
ここからは、実務でそのまま使える堅牢なコードをベースに、その中身を優しく解きほぐしていきます。
—
実装コード:一撃マルチエクスポート・マクロ
以下のコードをCorelDRAWのVBAエディタ(`Alt + F11`)に貼り付けて実行してみてください。アクティブなドキュメントを指定のフォルダへ、一瞬で4つのフォーマットへ同時書き出し、さらにバックアップ用フォルダに整理保存します。
Sub MasterMultiExport()
Dim doc As Document
Dim exportPath As String
Dim baseName As String
Dim expFilter As Variant
Dim expParams As StructExportOptions
Dim pdfParams As StructPDFSettings
‘ 1. アクティブなドキュメントの存在確認
If ActiveDocument Is Nothing Then
MsgBox “処理対象となるドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If
Set doc = ActiveDocument
‘ 2. 保存先のパスとファイル名(拡張子なし)の取得
‘ ※事前にドキュメントが保存されている必要があります
If doc.IsSaved = False Then
MsgBox “このドキュメントはまだ保存されていません。一度保存してから実行してください。”, vbExclamation, “警告”
Exit Sub
End If
‘ ファイル名とパスを分解して取得
baseName = Left(doc.Name, InStrRev(doc.Name, “.”) – 1)
exportPath = doc.Path & “\”
‘ 3. 出力用サブフォルダの自動作成(存在しない場合のみ)
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(exportPath & “Exported_Files”) Then
fso.CreateFolder (exportPath & “Exported_Files”)
End If
Dim targetDir As String
targetDir = exportPath & “Exported_Files\”
‘ 画面描画をロックして処理速度を極限まで上げる(プロのテクニック!)
EventsEnabled = False
ActiveDocument.BeginCommandGroup
On Error GoTo ErrorHandler
‘ —————————————————-
‘ ① CDR形式でバックアップ保存
‘ —————————————————-
doc.SaveAs targetDir & baseName & “.cdr”
‘ —————————————————-
‘ ② PDF形式でのエクスポート(印刷品質)
‘ —————————————————-
Dim pdfflt As Filter
Set pdfflt = doc.ExportEx(targetDir & baseName & “.pdf”, cdrPDF, cdrSelection)
‘ ※PDFの詳細設定が必要な場合はここでStructPDFSettingsを調整します
pdfflt.Finish
‘ —————————————————-
‘ ③ EPS形式でのエクスポート
‘ —————————————————-
doc.Export targetDir & baseName & “.eps”, cdrEPS, cdrSelection
‘ —————————————————-
ジ ④ SVG形式でのエクスポート(Web用)
‘ —————————————————-
doc.Export targetDir & baseName & “.svg”, cdrSVG, cdrSelection
‘ 正常終了の処理
ActiveDocument.EndCommandGroup
EventsEnabled = True
MsgBox “すべてのフォーマットへのエクスポートが完了しました!” & vbCrLf & _
“保存先: ” & targetDir, vbInformation, “完了”
Exit Sub
ErrorHandler:
‘ エラー発生時の安全装置
ActiveDocument.EndCommandGroup
EventsEnabled = True
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub
—
コードの重要ポイントを噛み砕く
初心者から一歩抜け出すために、このコードに散りばめられている「プロの知見」をいくつかピックアップして解説します。
1. 画面描画のロック (`EventsEnabled = False`)
デザインソフトのVBAで最も恐ろしいのは、処理の途中で画面がガチャガチャと再描画され、処理速度が極端に落ちること、そして予期せぬタイミングでユーザーがマウスやキーボードを触ってエラーを起こすことです。
処理の最初に `EventsEnabled = False`(または `ScreenUpdating = False` 相当の制御)をかけ、最後に `True` に戻すことで、処理の高速化と安全性の両立を図ります。
`FileSystemObject` によるディレクトリ自動生成
「ファイルを出力しようとしたら、フォルダがなくてエラーになった」という経験はありませんか?
VBAの `CreateObject(“Scripting.FileSystemObject”)` を使えば、コードの実行中に「指定したフォルダがなければ自動で生成する」という賢い挙動を実装できます。これにより、納品先ごとのフォルダ整理が完全に自動化されます。
エクスポートメソッドの使い分け (`Export` vs `ExportEx`)
CorelDRAW VBAには、シンプルに書き出す `Export` メソッドと、より高度なオプション制御が可能な `ExportEx` メソッドが存在します。
- EPSやSVGのように、デフォルト設定で充分なものはシンプルな `doc.Export` でサクッと処理。
- PDFのように、カラープロファイルやバージョン(PDF/Xなど)の厳密な指定が求められるものは、`ExportEx` を活用してフィルターオブジェクトを受け取るのが定石です。
—
陥りやすい罠と回避策(ここが重要!)
最後に、実務でこのマクロを運用する際に必ずハマる「罠」と、その対策をシェアしておきます。
- 罠1:未保存のドキュメントで実行してしまう
- 対策: コード内でもチェックしていますが、`doc.Path` は一度も保存されていないファイルに対して実行すると空欄を返し、パス結合で致命的なエラーになります。必ず「一度手動で名前を付けて保存したマスターデータ」から実行するルールにしましょう。
- 罠2:選択範囲 (`cdrSelection`) と全ページ (`cdrAllPages`) の混同
- サンプルコードでは現在選択中のオブジェクトを対象にしていますが、ページ全体を書き出したい場合は `cdrAllPages` に変更する必要があります。要件に合わせてここをカスタマイズしてください。
—
まとめ
今回は、複数フォーマットへの同時マルチエクスポートを通じて、CorelDRAW VBAの実践的なコントロール手法を解説しました。
「たったこれだけのコードで、何分もの手作業が1秒に縮まるのか!」という感動を味わっていただけたならエンジニアとして最高に嬉しいです。ここをクリアできれば、あなたもう立派なCorelDRAW自動化のエンジニアです。
日々の退屈なルーティンワークはマクロに任せて、あなたしか生み出せないクリエイティブな時間に集中しましょう。それでは、次回の高度なVBA解説でお会いしましょう!
