こんにちは、CorelDRAWオートメーションの世界へようこそ。
マクロの記録を卒業し、「自分専用のツール」を作りたいと思い始めたあなたの情熱、素晴らしいですね。私はこれまで数え切れないほどのワークフローを自動化してきましたが、CorelDRAW VBAにおいて、最も「自動化の恩恵」を実感できるのが、今回挑戦する『多重フォーマット一括エクスポート』です。
印刷用のPDF、Web用のSVG、素材用のEPS……。これらを一つずつ手動で書き出す作業は、クリエイティブな時間ではありません。これをボタン一つで終わらせる「魔法のツール」を、一緒に構築していきましょう。
ここをクリアすれば、CorelDRAW VBAの基本はバッチリですよ。
—
1. ユーザーフォーム:対話型ツールの「顔」を作る
まずは、エクスポートしたい形式を選択する画面(UserForm)を作りましょう。
手順:
1. CorelDRAWで `Alt + F11` を押し、VBAエディタを開きます。
2. メニューの「挿入」から「ユーザーフォーム」を選択。
3. ツールボックスから以下のコントロールを配置します。
- CheckBox1〜4: それぞれ「EPS」「PDF」「SVG」「CDR(保存)」用。
- CommandButton1: 「一括エクスポート実行」ボタン。
ヒント: オブジェクト名((Name)プロパティ)を `chkEPS` や `btnExport` のように分かりやすく書き換えておくと、コードを書くときに迷わなくなりますよ。
—
2. 実装コード:エンジニアの魂を込めたエクスポートロジック
それでは、UserFormのボタンをダブルクリックして、コードを記述しましょう。
このコードは、ただ書き出すだけでなく、「ドキュメントの状態を壊さない」というプロの配慮を盛り込んでいます。
‘ — UserFormのコードセクション —
Private Sub btnExport_Click()
Dim doc As Document
Set doc = ActiveDocument
‘ ドキュメントが開いているかチェック
If doc Is Nothing Then
MsgBox “ドキュメントが開かれていません。”, vbExclamation
Exit Sub
End If
‘ 保存先のパスを取得(現在のファイルと同じフォルダ)
Dim filePath As String
Dim fileName As String
Dim fullPath As String
If doc.FilePath = “” Then
MsgBox “一度ファイルを保存してから実行してください。”, vbCritical
Exit Sub
End If
filePath = doc.FilePath
‘ 拡張子を除いたファイル名を取得
fileName = Left(doc.FileName, InStrRev(doc.FileName, “.”) – 1)
‘ 描画の高速化(画面更新を停止)
Optimization = True
EventsEnabled = False
On Error GoTo ErrorHandler
‘ — EPS エクスポート —
If chkEPS.Value = True Then
Dim expFilter As ExportFilter
Dim expOptions As New StructExportOptions
‘ EPSの設定
expOptions.ImageType = cdrRGBColorImage ‘ 必要に応じてCMYKに変更
Set expFilter = doc.ExportEx(filePath & fileName & “.eps”, cdrEPS, cdrCurrentPage, expOptions)
expFilter.Finish
End If
‘ — PDF エクスポート —
If chkPDF.Value = True Then
‘ PDFは専用の設定オブジェクトを使用するのがプロの定石
Dim pdfSettings As New StructPDFSettings
With pdfSettings
.PublishRange = pdfWholeDocument
.ColorMode = pdfCMYK
.PdfVersion = pdfVersion17
End With
doc.PublishToPDF filePath & fileName & “.pdf”, pdfSettings
End If
‘ — SVG エクスポート —
If chkSVG.Value = True Then
Dim svgOptions As New StructExportOptions
‘ SVG特有のオプションが必要な場合はここで設定
doc.Export filePath & fileName & “.svg”, cdrSVG, cdrCurrentPage
End If
‘ — CDR 保存 (コピーとして保存) —
If chkCDR.Value = True Then
‘ SaveAsは現在開いているファイル自体を変えてしまうため、CopyAssignで別名保存が安全
doc.SaveAs filePath & fileName & “_backup.cdr”
End If
‘ 終了処理
Optimization = False
EventsEnabled = True
MsgBox “すべて完了しました!”, vbInformation
Unload Me
Exit Sub
ErrorHandler:
Optimization = False
EventsEnabled = True
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
—
3. 知っておきたい「プロの視点」:コードの解説
① `Optimization = True` の魔法
CorelDRAW VBAで最も重要な設定の一つです。これを `True` にすると、マクロ実行中の画面描画が一時停止されます。ユーザーの目には一瞬で終わったように見え、処理速度も劇的に向上します。最後に必ず `False` に戻すのを忘れないでくださいね。
② `Export` と `ExportEx` の違い
初心者の方は `Export` を使いがちですが、中級者を目指すなら `ExportEx` を意識しましょう。
- `Export`: シンプルな出力。
- `ExportEx`: `StructExportOptions` を使うことで、解像度やカラーモードを詳細にコントロールできます。
③ なぜ `On Error` を入れるのか?
エクスポート中、ファイルが別のソフトで開かれていたり、書き込み権限がなかったりするとマクロは止まってしまいます。`ErrorHandler` を用意しておくことで、ツールが「落ちる」のを防ぎ、安全に画面更新(Optimization)を再開させることができます。
—
4. 陥りやすいエラーと対策
1. ファイル名にドットが含まれる場合
`InStrRev` で拡張子を探していますが、ファイル名自体にドットが多いと誤作動することがあります。実務では `FileSystemObject` を使うのがより堅牢ですが、まずはこの基本形をマスターしましょう。
2. 単位系のトラップ
SVGやPDFのサイズ指定をする際、CorelDRAWの現在の単位(ミリ、インチなど)が影響することがあります。確実な処理をするなら、コードの冒頭で `doc.Unit = cdrMillimeter` と宣言するのが定石です。
—
最後に:一歩先へ進むあなたへ
お疲れ様でした!これで、「ただ描くだけ」のツールだったCorelDRAWが、あなたの命令に従って働く「自動生産ライン」へと進化しました。
このマクロが動いた瞬間、あなたは単なるオペレーターではなく、「仕組みを作るエンジニア」への第一歩を踏み出したことになります。次は、エクスポートする解像度をUIから入力できるようにしたり、選択しているオブジェクトだけを書き出す機能を追加したりして、自分色に染めてみてください。
もし途中でつまずいても大丈夫。VBAはあなたの試行錯誤に必ず応えてくれます。また分からないことがあれば、いつでも聞きに来てくださいね。
ハッピー・オートメーション!
