こんにちは!CorelDRAW VBAの世界へようこそ。
日々の業務で「このレイヤーは校正用だから非表示にして、特定のページだけをPDFで書き出したい…」という作業を何回も手作業で繰り返していませんか?
マクロの記録ボタンを押してPDF出力しようとしても、CorelDRAWのPDFパブリッシュ機能は対話型のダイアログが絡むため、記録だけでは歯が立たないことが多いです。「コードを書くのは難しそう…」と諦めかけていたあなたへ。ここをクリアすれば、CorelDRAW VBAの本質と実務での効率化の波が一気に押し寄せてきますよ。
今回は、「特定のレイヤーを強制的に非表示にし、指定ページだけをカスタム設定でPDF書き出しするマクロ」を、プロのアーキテクトの視点から優しく、そして本質的に解説します。
—
なぜ「マクロの記録」だけではPDF自動化ができないのか?
CorelDRAWの「マクロの記録」は便利な機能ですが、PDFのエクスポート(PublishToPDF)に関しては、記録機能がすべてのパラメータを正しくキャプチャしてくれないという罠があります。
さらに、実務で使うためには以下の制御が必須です。
1. レイヤーの表示・非表示の切り替え(印刷したくないレイヤーをプログラムで隠す)
2. ページ範囲の指定(全ページではなく、例えば2ページ目から4ページ目だけなど)
3. PDFパブリッシュオプションの指定(PDF/X形式にする、フォントを埋め込むなど)
これらを自前のコードでコントロールできるようになると、毎日のルーティンワークが「ワンクリック」で終わるようになります。
—
実装コード:一瞬でPDFを生成するプロの作法
以下のコードをCorelDRAWのVBAエディタ(`Alt + F11`)に貼り付けて実行してみてください。
実務でそのまま使えるよう、細かくコメントを入れています。
Sub ExportSpecificPagesToPDF()
Dim doc As Document
Dim targetLayerName As String
Dim layerFound As Boolean
Dim p As Page
Dim pdfParams As StructPDFExportSettings
Dim originalActivePage As Page
‘ —————————————————-
‘ 1. 事前準備と設定
‘ —————————————————-
Set doc = ActiveDocument
If doc Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical, “エラー”
Exit Sub
End If
‘ 現在のアクティブページを保持しておく(処理後に戻すため)
Set originalActivePage = doc.ActivePage
‘ 非表示にしたいレイヤー名を指定(ご自身の環境に合わせて変更してください)
targetLayerName = “校正用メモ”
layerFound = False
‘ 画面描画をロックして処理速度を極限まで上げる(画面のチラつき防止)
doc.DrawingManager.UpdateScreen = False
On Error GoTo ErrorHandler
‘ —————————————————-
‘ 2. 全ページの特定レイヤーを非表示にする
‘ —————————————————-
‘ CorelDRAWでは、レイヤーの表示状態はページ(マスターレイヤー含む)ごとに
‘ 存在することがあるため、全ページを走査して確実に非表示にします。
For Each p In doc.Pages
Dim lyr As Layer
For Each lyr In p.Layers
If lyr.Name = targetLayerName Then
lyr.Visible = False
layerFound = True
End If
Next lyr
Next p
‘ —————————————————-
‘ 3. PDFパブリッシュ設定の構築
‘ —————————————————-
Set pdfParams = New StructPDFExportSettings
With pdfParams
‘ 【重要】ページ範囲を指定(例: “2-4” または “1,3,5” など)
‘ ※ドキュメント全体の書き出しなら .PublishRange = prAll
.PublishRange = prRange
.Range = “2-4” ‘ ここを用途に合わせて変更してください
‘ PDF互換バージョン(例: Acrobat 8 / PDF 1.7)
.Version = pdfVersion17
‘ テキストを曲線(アウトライン)に変換するかどうか(Trueでフォント化け防止)
.TextAsCurves = True
‘ カラープロファイルや圧縮設定などのカスタムが可能
.ColorMode = pdfColorCMYK
End With
‘ —————————————————-
‘ 4. PDFのエクスポート実行
‘ —————————————————-
Dim outputPath As String
‘ デスクトップに「Output.pdf」という名前で保存する場合のパス生成例
outputPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\CustomExport.pdf”
‘ パブリッシュ実行!
doc.PublishToPDF outputPath, pdfParams
‘ —————————————————-
‘ 5. 後処理(画面描画の復元とレイヤーの再表示)
‘ —————————————————-
‘ 非表示にしたレイヤーを元に戻す(必要に応じて)
For Each p In doc.Pages
For Each lyr In p.Layers
If lyr.Name = targetLayerName Then
lyr.Visible = True
End If
Next lyr
Next p
doc.DrawingManager.UpdateScreen = True
doc.ActivePage = originalActivePage
‘ 完了メッセージ
MsgBox “PDFの書き出しが完了しました!” & vbCrLf & outputPath, vbInformation, “成功”
Exit Sub
ErrorHandler:
‘ エラー発生時でも描画ロックとレイヤー状態が壊れないようにする安全装置
doc.DrawingManager.UpdateScreen = True
doc.ActivePage = originalActivePage
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub
—
コードの重要ポイントを噛み砕く
ここさえ押さえれば、あなたもCorelDRAW VBAマスターです。コードの肝となる3つのポイントを解説します。
1. `doc.DrawingManager.UpdateScreen = False` の魔法
大量のページをループしてレイヤーの表示・非表示を切り替える際、画面が毎回再描画されると、処理が非常に遅くなり画面がパチパチと点滅します。
処理の最初に `False` にし、最後に `True` に戻すことで、バックグラウンドで高速に処理を終わらせることができます。プログラミングの鉄則ですね。
2. 全ページのレイヤーを舐め尽くすループ
CorelDRAWのレイヤー構造は少し特殊です。ドキュメント全体で共通の「マスターレイヤー」と、ページごとの「ローカルレイヤー」があります。
今回のコードでは、安全のために `For Each p In doc.Pages` で全ページを巡回し、指定した名前のレイヤー(`targetLayerName`)があれば確実に `Visible = False` にしています。
3. `StructPDFExportSettings` による完全制御
「マクロの記録」では隠れてしまうPDFの出力仕様を、このオブジェクトを使ってコードで完全にコントロールしています。
特に `.TextAsCurves = True`(テキストのアウトライン化)は、印刷所入稿用PDFを作成する際にフォントトラブルを防ぐための必須テクニックです。
—
陥りやすい罠とエラー回避のコツ
- 「指定したレイヤー名が見つからない」エラー
- コード内の `targetLayerName = “校正用メモ”` の部分は、実際のCorelDRAW上のレイヤー名と一字一句(全角半角も含めて)一致させる必要があります。レイヤー名が違っていると非表示になりません。
- ページ範囲の指定ミス
- `.Range = “2-4″` の書式はCorelDRAWの仕様に依存します。存在しないページ番号(例:全3ページのドキュメントで `5` を指定するなど)を渡すとエラーになるため、事前にドキュメントの総ページ数(`doc.Pages.Count`)をチェックする条件分岐を入れておくと、さらに堅牢なマクロになります。
—
おわりに
いかがでしたでしょうか?
「レイヤーを隠して、特定のページだけを、決まった設定でPDFにする」という一連の面倒な手作業も、VBAのオブジェクトを正しく使えば一瞬で自動化できます。
ここをクリアしたあなたなら、次は「ボタンをカスタムツールバーに配置する」「フォルダ内の全CDRファイルを一括変換する」といった、さらなる高みへ進む準備はバッチリです。
日々の退屈な作業はコードに任せて、あなたしかできないクリエイティブな時間に集中しましょう!
