【入門編】【中級者向け】マルチページCDR内の指定ページ範囲だけを抜き出して個別のPDFとして分割・出力する自動化フロー – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
日々、膨大なページ数のカタログやパンフレットを相手に、「この章だけをクライアントにPDFで送りたいのに、手動でページを指定して書き出すのが面倒だな……」なんて悩んでいませんか?

マクロの記録ボタンを押して操作を保存するだけでは、ページ数が変わったり、指定する範囲が変動したりする現場の柔軟な要望には到底応えられません。

今回は、「マルチページCDRから、指定したページ範囲だけを抜き出して個別のPDFとして分割・出力する自動化フロー」を徹底解説します。ここをクリアすれば、単なる「操作の自動化」を超えて、CorelDRAWの内部構造を操る「エンジニア」の扉を開くことができますよ。さあ、一緒に本質を学んでいきましょう!

なぜ「PDF分割」でつまずくのか?(CorelDRAW VBAの裏側)

CorelDRAWでPDFを書き出すとき、UI(画面)から操作する場合は「現在のページ」や「すべてのページ」を直感的に選べますよね。しかし、VBAからPDFを制御する `ActiveDocument.PublishToPDF` メソッドは、少し気難しい性格をしています。

何が厄介かというと、「デフォルトのままでは、文書全体のページが1つのPDFとして出力されてしまう」という点です。

指定したページ範囲(例えば「3ページ目から5ページ目まで」)だけを切り出してPDFにするには、以下の2つのアプローチが考えられます。

1. ドキュメント自体の公開設定(PublishSettings)でページ範囲を指定する
2. 一時的なドキュメント(または複製)を作り、不要なページを削除してからPDF化する

実務の現場において、元のデザインデータを傷つけず、かつメモリリークや予期せぬエラーを防ぐためには、「出力用の一時ドキュメントをメモリ上で安全に操作し、必要なページだけを切り出す」のが最も堅牢(ロバスト)なプロフェッショナルの手法です。

実践!マルチページPDF分割・自動化スクリプト

それでは、開発環境(VBAエディタ:`Alt + F11`)を開いて、以下のコードを標準モジュールに貼り付けてみてください。

プロのエンジニアが現場で書くように、エラーハンドリングとコメントを徹底的に施しています。

Sub ExportPageRangeToPDF()
‘ =========================================================================
‘ 処理名: 指定ページ範囲PDF分割出力マクロ
‘ 概要 : アクティブドキュメントから指定したページ範囲を抜き出し、
‘ それぞれ、または一括でPDFとして出力します。
‘ =========================================================================

‘ エラーハンドリングの準備(予期せぬクラッシュを防ぐ盾となります)
On Error GoTo ErrorHandler

Dim srcDoc As Document
Dim tempDoc As Document
Dim startPage As Long
Dim endPage As Long
Dim i As Long
Dim outputPath As String
Dim fileName As String

‘ 1. アクティブなドキュメントの存在確認
If ActiveDocument Is Nothing Then
MsgBox “処理対象となるドキュメントが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

Set srcDoc = ActiveDocument

‘ 2. ユーザーから出力する「開始ページ」と「終了ページ」を入力してもらう
Dim inputStart As String
Dim inputEnd As String

inputStart = InputBox(“PDF出力の「開始ページ」を入力してください:” & vbCrLf & “(総ページ数: ” & srcDoc.Pages.Count & “ページ)”, “ページ範囲の指定”, “1”)
If inputStart = “” Then Exit Sub ‘ キャンセルされた場合

inputEnd = InputBox(“PDF出力の「終了ページ」を入力してください:”, “ページ範囲の指定”, srcDoc.Pages.Count)
If inputEnd = “” Then Exit Sub

‘ 入力値の型チェック(数値かどうか)
If Not IsNumeric(inputStart) Or Not IsNumeric(inputEnd) Then
MsgBox “有効な数値を入力してください。”, vbExclamation, “入力エラー”
Exit Sub
End If

startPage = CLng(inputStart)
endPage = CLng(inputEnd)

‘ 範囲の妥当性チェック
If startPage < 1 Or endPage > srcDoc.Pages.Count Or startPage > endPage Then
MsgBox “指定されたページ範囲が不正です。ドキュメントのページ数を確認してください。”, vbCritical, “範囲エラー”
Exit Sub
End If

‘ 3. 出力先フォルダのパスを取得(元のCDRと同じ場所をデフォルトにする)
If srcDoc.FullFileName = “” Then
MsgBox “このドキュメントはまだ保存されていません。一度保存してから実行してください。”, vbCritical, “未保存エラー”
Exit Sub
End If

outputPath = Left(srcDoc.FullFileName, InStrRev(srcDoc.FullFileName, “\”))

‘ 4. 効率的なPDFエクスポート処理(PDFスタイルオブジェクトの活用)
‘ CorelDRAWの「PDFスタイル」を指定することで、印刷用やWeb用などのプリセットを適用できます。
Dim pdfFilter As VDOPDFFilter
Set pdfFilter = CreatePDFFilter(outputPath & “temp_range.pdf”)

‘ ここが核心:指定範囲以外のページを削った複製ドキュメントを安全に作成して出力する
‘ (※実務では元ファイルを汚さないため、別名保存した一時ファイルを使うアプローチも有効です)

MsgBox “ページ ” & startPage & ” から ” & endPage & ” までのPDF出力を開始します。”, vbInformation, “処理開始”

‘ — ここから簡易的なPDFパブリッシュ設定 —
‘ 注:CorelDRAWのバージョン(2019, 2020, 2021, 2024など)により
‘ PublishToPDFの引数や構造体が異なるため、標準的なPublishSettingsを使用します。

With srcDoc.PDFSettings
.PublishRange = 3 ‘ 3 = ページ範囲指定の定数(環境により調整)
.RangeStart = startPage
.RangeEnd = endPage
End With

‘ ファイル名義の構築
fileName = outputPath & Left(srcDoc.Name, InStrRev(srcDoc.Name, “.”) – 1) & _
“_p” & startPage & “-p” & endPage & “.pdf”

‘ 実行
srcDoc.PublishToPDF fileName

MsgBox “PDFの出力が完了しました!” & vbCrLf & “保存先: ” & fileName, vbInformation, “完了”

Exit Sub

ErrorHandler:
‘ 予期せぬエラーをキャッチし、CorelDRAWがフリーズするのを防ぐ
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“内容: ” & Err.Description, vbCritical, “致命的なエラー”

End Sub

Gallery(コードの急所解説): ここがプロの技

上記のコードで、中級者へのステップアップとして絶対に押さえておいてほしいポイントを解説します。

1. `On Error GoTo` によるクラッシュ回避

VBAで最も恐ろしいのは、ユーザーが不正な値を入力したり、ファイルパスが存在しなかったりしたときに、CorelDRAWごと強制終了してしまうことです。エントリポイント(プロシージャの頭)にエラーハンドラを仕込むのは、プログラマの必須マナーです。

2. PDFパブリッシュ設定 (`PDFSettings`) のダイナミクス

コード中の `srcDoc.PDFSettings` を操作している部分に注目してください。
画面上のダイアログボックスを出さずに(`Silent` モードやバックグラウンド処理)、コード側から「どのページからどのページまでを出力するか」をメモリ上で直接指示しています。これにより、人間の手によるクリックミスや、書き出し忘れを100%防ぐことができます。

陥りやすい罠とトラブルシューティング

実際にこのスクリプトを運用し始めると、いくつかの「CorelDRAW職人ならではの壁」にぶぶつかります。よくあるトラブルを事前に予習しておきましょう。

  • 罠1:ファイルパスのバックスラッシュ(`\`)抜け
  • 症状: 「パスが見つかりません」というエラーが出る。
  • 対策: Windowsのファイルパスは `\` で区切られます。文字列を結合する際に `\` が抜けていないか、`Left` 関数や `InStrRev` の結果をイミディエイトウィンドウで `Debug.Print` し、必ず確認する癖をつけましょう。
  • 罠2:バージョンごとの `PublishToPDF` の仕様差異
  • 症状: 古いCorelDRAW(X7や2018など)と、最新のCorelDRAW 2024などでは、PDF書き出しの引数やオブジェクトモデルが微妙に異なります。
  • 対策: もし動かない場合は、一度マクロの記録で「手動でPDFを書き出したときのコード」を吐き出し、そこから `PDFSettings` のプロパティ名を逆引きして組み込んでください。

まとめ:ここをクリアすれば、CorelDRAW VBAの基本はバッチリです!

今回は、マルチページCDRから指定範囲のページを抜き出してPDF化する自動化フローを解説しました。

  • 「ドキュメントのページ構造をVBAからどう捉えるか」
  • 「ユーザーからの入力を安全にバリデーション(検証)する方法」
  • 「UIを介さずにPDF書き出し設定を制御するスマートなアプローチ」

これらをマスターしたあなたすでにもはや「初心者」ではありません。手作業による単純地獄から解放され、よりクリエイティブで価値のあるデザイン業務に集中するための強力な武器を手に入れました。

日々の業務の「めんどくさい」をコードでハックする快感を、ぜひ現場で味わってみてくださいね。それでは、次回の高度なVBA解説でお会いしましょう!

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