【実務・中級編】【中級者向け】複数フォーマット(EPS・PDF・SVG・CDR)のエクスポート設定をUIフォームから選択し、一括で多重出力するカスタムダイアログの構築 – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAを掌握する:多重フォーマット一括エクスポートツールの構築とアーキテクチャ

プロフェッショナルの現場において、「手作業で一つずつ別名保存する」という行為は、単なる時間の浪費ではなく「品質の不均一」を招くリスクであると認識すべきです。

デザイナーがクリエイティブに集中し、出力という定型業務を機械に委ねる。これを実現するには、単なる記録マクロでは不十分です。本稿では、CorelDRAW VBAを使い、EPS、PDF、SVG、そしてCDRのバックアップを一撃で生成する、堅牢かつ実戦的なUIツールの構築手法を伝授します。

1. 設計思想:なぜ「動的なエクスポート」が必要なのか

多くの初心者は、`ActiveDocument.Export` メソッドを引数なしで呼び出し、標準のダイアログに頼ります。しかし、業務自動化の真髄は「ユーザーに余計な選択をさせないこと」にあります。

非効率な設計の末路

  • 設定のブレ: 担当者によってPDFのプリセットが変わってしまう。
  • パスの入力ミス: 保存先を手入力させることで、ファイルが迷子になる。
  • 拡張性の欠如: 新しいフォーマットを追加するたびに、コードを数百行書き換える。

我々が目指すべきは、「出力設定を抽象化し、UIとロジックを完全に分離した疎結合なアーキテクチャ」です。

2. UI(UserForm)の設計指針

UserFormは単なる見た目ではありません。「バリデーション(入力チェック)の最前線」です。

推奨されるコントロール配置

1. CheckBoxes: `chkEPS`, `chkPDF`, `chkSVG`, `chkCDR`(出力要否の選択)
2. TextBox: `txtExportPath`(出力先ディレクトリ)
3. CommandButton: `btnExecute`(実行)

> Architect’s Tip: 保存先パスは必ず `BrowseForFolder` API、もしくは `FileDialog` を利用して取得させなさい。手入力はバグの温床です。

3. プロダクション・コード:多重出力エンジン

以下に、実務に耐えうる堅牢なコードを示します。このコードの肝は、各形式ごとの「エクスポート・フィルタ」の適切な制御にあります。

標準モジュール:メインエントリ

Option Explicit

‘ —————————————————————————
‘ 目的: エクスポートフォームを起動する
‘ —————————————————————————
Public Sub ShowExportManager()
‘ ドキュメントが開いているかチェック
If Documents.Count = 0 Then
MsgBox “対象となるドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

‘ フォームの表示
frmExportManager.Show vbModeless
End Sub

UserForm(frmExportManager)内ロジック

Option Explicit

‘ 実行ボタン押下時のメインロジック
Private Sub btnExecute_Click()
Dim exportPath As String
Dim fileName As String
Dim doc As Document

Set doc = ActiveDocument
exportPath = txtExportPath.Text

‘ 1. バリデーション
If Right(exportPath, 1) <> “\” Then exportPath = exportPath & “\”
If Dir(exportPath, vbDirectory) = “” Then
MsgBox “指定されたフォルダが存在しません。”, vbCritical
Exit Sub
End If

‘ 拡張子を除いたファイル名を取得
fileName = Left(doc.FileName, InStrRev(doc.FileName, “.”) – 1)
If fileName = “” Then fileName = “Untitled”

‘ パフォーマンス最適化:描画停止
On Error GoTo ErrorHandler
Optimization = True
EventsEnabled = False

‘ 2. 各フォーマットへの振り分け
If chkCDR.Value Then Call ExportAsCDR(doc, exportPath & fileName & “.cdr”)
If chkPDF.Value Then Call ExportAsPDF(doc, exportPath & fileName & “.pdf”)
If chkEPS.Value Then Call ExportAsEPS(doc, exportPath & fileName & “.eps”)
If chkSVG.Value Then Call ExportAsSVG(doc, exportPath & fileName & “.svg”)

MsgBox “一括出力が完了しました。”, vbInformation, “Success”

CleanUp:
Optimization = False
EventsEnabled = True
Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
Resume CleanUp
End Sub

‘ — 各エクスポート・サブ関数 —

Private Sub ExportAsCDR(doc As Document, fullPath As String)
‘ CDRは保存処理。バージョンを指定することで互換性を担保。
Dim opt As New StructSaveAsOptions
opt.Version = cdrCurrentVersion
doc.SaveAs fullPath, opt
End Sub

Private Sub ExportAsPDF(doc As Document, fullPath As String)
‘ PDFエンジンは詳細設定が可能。ここではプリセットを利用。
With doc.PDFSettings
.Reset
.PublishRange = pdfWholeDocument
.PdfVersion = pdfVersion17
.ColorMode = pdfCMYK
‘ テキストを曲線に変換してトラブルを防止
.ConvertObjectsToCurves = True
End With
doc.PublishToPDF fullPath
End Sub

Private Sub ExportAsEPS(doc As Document, fullPath As String)
Dim expFilter As ExportFilter
Dim expOptions As New StructExportOptions

‘ EPS特有の設定
expOptions.UseColorProfile = True

Set expFilter = doc.ExportEx(fullPath, cdrEPS, cdrCurrentPage, expOptions)

‘ フィルタダイアログを表示させずに実行するための重要設定
With expFilter
‘ ここでEPSの詳細パラメータをセット(PostScriptレベル等)
‘ .Finish メソッドを呼ぶことで確定
.Finish
End With
End Sub

Private Sub ExportAsSVG(doc As Document, fullPath As String)
Dim expFilter As ExportFilter
Dim expOptions As New StructExportOptions

Set expFilter = doc.ExportEx(fullPath, cdrSVG, cdrCurrentPage, expOptions)

‘ SVGフィルタの制御
With expFilter
‘ 必要に応じてフォントの埋め込み設定などを追加
.Finish
End With
End Sub

4. 現場のチーフアーキテクトが教える「プロの鉄則」

① `ExportEx` と `Finish` の関係を理解せよ

CorelDRAW VBAにおいて、`Export` メソッドと `ExportEx` メソッドは似て非なるものです。
`ExportEx` は ExportFilterオブジェクト を返します。このオブジェクトのプロパティを操作した後に `.Finish` を呼ぶことで、ユーザーに設定ダイアログを見せることなく(=完全に自動で)出力を完了させることができます。これを怠ると、大量出力中に何度もダイアログをクリックさせられる「自動化の皮を被った手作業」に成り下がります。

② パフォーマンスの重み:`Optimization`

コード内で `Optimization = True` を設定しています。これは画面更新をフリーズさせる命令です。
数ページのドキュメントなら微々たる差ですが、複雑なベクターデータや数百個のファイルを回す場合、これがあるかないかで実行速度が3倍から10倍変わります。

③ ファイルシステムとの連携

実務では、ネットワークドライブ(NAS)への保存が頻発します。
`FileSystemObject` (FSO) を利用して、出力前にディレクトリの書き込み権限があるか、同名のファイルが「読み取り専用」でロックされていないかをチェックするルーチンを組み込むのが、真に「堅牢」なコードです。

5. 終わりに:ツールを育てるということ

今回紹介したコードは、あくまで「エンジン」の最小構成です。
ここから、

  • データベース連携: 出力履歴をSQL ServerやCSVに記録する。
  • Slack/Teams通知: 出力完了をチームに自動通知する。
  • 自動プリフライト: 出力前に「ヘアライン(極細線)」がないかスキャンする。

といった機能を肉付けしていくことで、あなたの作成するツールは単なる「マクロ」から、組織の「インフラ」へと昇華します。

コードを書くことは手段であり、目的は「人間を単純作業から解放すること」にある。この視点を忘れずに、CorelDRAWの広大なAPIの海を航海してください。

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