こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して生成されたコードを眺めて、「なんだか不要な記述が多くて、動かしたり改造したりするのが難しそうだな…」と感じたことはありませんか?
実務の現場で最も多い作業の一つが「印刷用PDFの書き出し」です。
「トンボをつけたい」「特定のレイヤー(例えば、社内用のメモレイヤーやダイカットのパス)だけ非表示にしたい」「カラープロファイルを適切に指定したい」。これらを毎回手作業でやっていると、人的ミス(ヒューマンエラー)の温床になります。
今回は、CorelDRAWのオブジェクトモデルの核心に触れながら、レイヤーの可視性制御と`PublishToPDF`オプションを極限までコントロールする完全自動化スクリプトを一緒に組み立てていきましょう。
ここをクリアすれば、CorelDRAW VBAの基礎と、実務で戦うための「本質的なオブジェクト操作」はバッチリです!
—
1. CorelDRAWオブジェクトモデルの「階層構造」を理解する
VBAでまずつまずくポイントは、「今、どのオブジェクトを操作しているのか」が見えなくなることです。
CorelDRAWのドキュメント構造は、ロシアの民芸品「マトリョーシカ」のように綺麗に入れ子構造になっています。
Application (CorelDRAW本体)
└─ ActiveDocument (アクティブなドキュメント)
└─ Pages (ページコレクション)
└─ Layer (レイヤー)
└─ Shape (図形・オブジェクト)
PDFを書き出す際、この階層構造を降りていき、「特定のレイヤーの表示・非表示を切り替えてからパブリッシュする」というアプローチを取ります。
—
2. マクロ記録の罠:なぜ「生コード」ではダメなのか?
CorelDRAWのマクロ記録機能を使うと、次のようなコードが吐き出されます。
‘ マクロ記録で生成されがちな冗長なコード例
ActiveDocument.PublishToPDF “C:\Output\sample.pdf”
これの何が問題かというと、「今のドキュメントの状態でそのまま書き出してしまう」点です。
実務では、「PDF用のレイヤー構成にしてから書き出し、終わったら元の画面状態に戻したい」といった動的な制御が必要です。そのためには、ApplicationやDocumentオブジェクトのプロパティをコードから直接叩く必要があります。
—
3. 実装:レイヤー制御付き・高度PDFパブリッシュ自動化スクリプト
それでは、実務でそのままコピー&ペーストして使えるプロダクション・レディなコードを公開します。
このコードには、「不要なレイヤーをコードで非表示にする」「PDFパブリッシュの詳細設定(トンボやカラー)」がすべて詰まっています。
Sub ExportPrintReadyPDF()
‘ ==========================================
‘ 印刷用PDFパブリッシュ自動化マクロ
‘ 執筆者:シニアCorelDRAW自動化エンジニア
‘ ==========================================
Dim doc As Document
Set doc = ActiveDocument
‘ ドキュメントが開かれていない場合のガード処理
If doc Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。”, vbCritical, “エラー”
Exit Sub
End If
On Error GoTo ErrorHandler
‘ 処理高速化のための画面描画・イベント一時停止
Application.Optimization = True
EventsEnabled = False
‘ ——————————————
‘ 1. レイヤーの可視性コントロール
‘ ——————————————
Dim targetLayer As Layer
‘ 例:「社内メモ」という名前のレイヤーを強制的に非表示にする
‘ ※存在しないレイヤー名を指定した時のエラーを防ぐため、ループで走査します
For Each targetLayer In doc.Pages(1).Layers
If targetLayer.Name = “社内メモ” Then
targetLayer.Visible = False
Exit For
End If
Next targetLayer
‘ ——————————————
‘ 2. PDFパブリッシュ設定オブジェクトの構築
‘ ——————————————
Dim pdfParams As StructPDFExportSettings
Set pdfParams = CreateStructPDFExportSettings
With pdfParams
‘ 互換性(例:Acrobat 8 / PDF 1.7)
.Compatibility = icsPDFa1b ‘ または icsPDF17 など要件に合わせて変更
‘ カラーマネジメント・プロファイルの維持
.PublishRange = icsPublishDocument ‘ ドキュメント全体
.TextAsCurves = True ‘ フォントはすべてアウトライン化(トラブル防止の鉄則!)
‘ 印刷用オプション(トンボや裁ち落とし)
.IncludeCropMarks = True ‘ トンボ(トリムマーク)をつける
.BleedLimit = 2540000 ‘ 裁ち落とし(2mm = 2,000,000ピコ単位。Corelは内部でピコ単位を使用)
‘ 圧縮設定(高品質印刷用)
.BitmapDownsampling = 0 ‘ ダウンサンプルしない(原寸維持)
End With
‘ ——————————————
‘ 3. 出力ファイルパスの動的生成(元ファイルと同階層の「PDF_Output」フォルダへ)
‘ ——————————————
Dim outputPath As String
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 元ファイルが未保存の場合はデスクトップへ
Dim baseDir As String
If doc.Saved = True Then
baseDir = fso.GetParentFolderName(doc.FullName)
Else
baseDir = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”)
End If
‘ 出力用フォルダがなければ作成
Dim outputDir As String
outputDir = baseDir & “\PDF_Output”
If Not fso.FolderExists(outputDir) Then
fso.CreateFolder (outputDir)
End If
outputPath = outputDir & “\” & fso.GetBaseName(doc.Name) & “_” & Format(Now, “yyyymmdd_hhnnss”) & “.pdf”
‘ ——————————————
‘ 4. パブリッシュ実行
‘ ——————————————
doc.PublishToPDF outputPath, pdfParams
‘ 終了処理(画面描画を戻す)
Application.Optimization = False
EventsEnabled = True
Doc.Views(1).Refresh
MsgBox “印刷用PDFの書き出しが完了しました!” & vbCrLf & “保存先: ” & outputPath, vbInformation, “完了”
Exit Sub
ErrorHandler:
‘ エラー発生時も必ず描画ロックを解除する(これ重要!)
Application.Optimization = False
EventsEnabled = True
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
—
4. コードの深掘り:ここがエンジニアのこだわりポイント
初心者から一歩抜け出すために、上記のコードで特に重要な3つのポイントを解説します。
① `Application.Optimization = True` による爆速化
CorelDRAWは、VBAでオブジェクト(レイヤーや図形)の表示・非表示を切り替えるたびに、画面の再描画を行おうとします。これがマクロを遅くする最大の原因です。
処理の最初に `Optimization = True` を宣言し、処理の最後で `False` に戻すことで、画面描画を裏で一括処理し、実行速度を何倍にも跳ね上げることができます。これはプロの常識です。
② フォントのアウトライン化 (`.TextAsCurves = True`)
印刷所への入稿データで最も多いトラブルが「文字化け」や「フォントの置き換わり」です。
パブリッシュ設定で `.TextAsCurves = True` を指定しておけば、PDF化の瞬間に文字がパス(図形)に変換されるため、相手の環境にフォントがなくても完璧な状態で印刷されます。
③ CorelDRAW独自の単位「ピコ (Picols)」の罠
コード内の `.BleedLimit = 2540000` という数字に驚いたかもしれません。
CorelDRAWのVBAの内部数値は、ミリメートルやインチではなく「ピコ(1インチ = 72,000,000ピコ)」という極めて細かい単位で処理されています。裁ち落としを正確に設定したいときは、この内部単位の仕組みを意識する必要があります(※今回のコードでは2mm相当の値を設定しています)。
—
5. 陥りやすいエラーと対策
- 「オブジェクト変数または With ブロック変数が見つかりません」というエラーが出る
→ ドキュメントが1つも開かれていない状態でマクロを走らせると発生します。必ず `If doc Is Nothing Then` のようなガード節を入れておきましょう。
- PDFを開いた時に「社内メモ」が消えていない
→ レイヤー名が完全一致しているか確認してください(全角・半角、前後のスペースにも注意)。また、レイヤーがマスターページ(全ページ共通)にある場合は、`doc.MasterPage.Layers` を走査する必要があります。
—
まとめ
いかがでしたでしょうか?
今回は、CorelDRAW VBAを用いた「レイヤー可視性の制御」と「プロ仕様のPDFパブリッシュ自動化」について解説しました。
マクロの記録から卒業し、こうしたオブジェクトモデルを操るコードが書けるようになると、毎日のルーティンワークがボタン一つで終わるようになり、クリエイティブな時間劇的に増えます。
「ここをもっとこうしたい」「こういう場合の書き方も知りたい」といった疑問があれば、ぜひコメント欄で教えてくださいね。あなたのVBAライフを応援しています!
