Visio VBAでPDF保存!このページ・複数ページを一括出力する方法

VBA

Visioで作った図面を、PDFにして共有することってありますよね。
毎回[名前を付けて保存]を開いて、PDFを選んで、保存先を指定して……。
ページが多いと、地味に面倒!

この図面、PDFにして送って~

ボタンひとつで保存できたら楽なのに……

ということで
今回は、Visio VBAを使ってPDFを保存する方法をご紹介します。

現在のページだけ保存する方法と、複数ページをまとめて1つのPDFにする方法を見ていきましょう。

PDF保存に使う「ExportAsFixedFormat」とは

構文

Visio VBAでPDFを保存するときは、ExportAsFixedFormatメソッドを使います。

Document.ExportAsFixedFormat _
FixedFormat, _
OutputFileName, _
Intent, _
PrintRange

OutputFileNameに出力したいファイル名を指定するよ

今回使う主な引数はこちらです。

引数指定する内容
FixedFormatPDF:visFixedFormatPDF
XPS:visFixedFormatXPS
OutputFileName保存先とファイル名例:"C:\PDF\図面.pdf"
Intent印刷用:visDocExIntentPrint
画面表示用:visDocExIntentScreen
PrintRange全ページ:visPrintAll
現在のページ:visPrintCurrentPage
指定範囲:visPrintFromTo
選択範囲:visPrintSelection

現在のページをPDFに保存する方法

マジ?これだけ??

Sample

現在表示しているページをPDFにするサンプルです。

コード

Sub ExportCurrentPageToPDF()

Dim pdfPath As String

'PDFの保存先とファイル名
pdfPath = ActiveDocument.Path & ActivePage.Name & ".pdf"

'現在のページをPDFに保存
ActiveDocument.ExportAsFixedFormat _
visFixedFormatPDF, _
pdfPath, _
visDocExIntentPrint, _
visPrintCurrentPage

MsgBox "PDFを保存しました。"

End Sub

ActiveDocument.Pathで、開いているVisioファイルの保存先を取得しています。

その後ろに、現在のページ名と.pdfをつなげています。

たとえばページ名が「ページ-1」なら、Visioファイルと同じフォルダーに「ページ-1.pdf」が保存されます。

複数ページを1つのPDFに一括保存する方法

続いて、図面内のすべてのページを1つのPDFにまとめます。

変更するのは、最後のPrintRange部分です。

Sample

Sub ExportAllPagesToPDF()

    Dim pdfPath As String

    'PDFの保存先とファイル名
    pdfPath = ActiveDocument.Path & "Visio図面.pdf"

    'すべてのページを1つのPDFに保存
    ActiveDocument.ExportAsFixedFormat _
        visFixedFormatPDF, _
        pdfPath, _
        visDocExIntentPrint, _
        visPrintAll

    MsgBox "すべてのページをPDFに保存しました。"

End Sub

現在のページを表すvisPrintCurrentPageを、visPrintAllへ変更しました。

これだけで、図面内のすべての前景ページが1つのPDFに保存されます。

1ページずつ保存しなくていいのか!

ページが多い図面ほど楽になるね

保存先・ファイル名を指定する

保存先とファイル名は、pdfPathで指定しています。

pdfPath = "C:\PDF\回路図.pdf"

Visioファイルと同じフォルダーへ保存するなら、次のように指定できます。

pdfPath = ActiveDocument.Path & "回路図.pdf"

でも、保存するたびにコードを書き換えるのはちょっと面倒ですよね。

InputBoxで保存先を入力する

そこで、InputBoxに保存先とファイル名を入力できるようにしてみます。

保存先を毎回選びたい場合はこちらが便利です。

Sub ExportAllPagesToPDF()

    Dim pdfPath As String

    pdfPath = InputBox( _
        "PDFの保存先とファイル名を入力してください。", _
        "PDF保存先", _
        ActiveDocument.Path & "Visio図面.pdf")

    'キャンセル・未入力なら終了
    If pdfPath = "" Then Exit Sub

    '拡張子がなければ追加
    If LCase$(Right$(pdfPath, 4)) <> ".pdf" Then
        pdfPath = pdfPath & ".pdf"
    End If

    'すべてのページをPDFに保存
    ActiveDocument.ExportAsFixedFormat _
        visFixedFormatPDF, _
        pdfPath, _
        visDocExIntentPrint, _
        visPrintAll

    MsgBox "PDFを保存しました。" & vbCrLf & pdfPath

End Sub

実行すると、保存先とファイル名を入力する画面が表示されます。

初期値には、Visioファイルと同じフォルダーが入っています。保存先やファイル名を変更して[OK]を押せば、指定した場所へPDFが保存されます。

エラーが出るときの確認ポイント

うまく保存できないときは、次の点を確認してみてください。

  • Visioファイルが一度も保存されていない
  • 指定した保存先のフォルダーが存在しない
  • 同じ名前のPDFを開いたままにしている
  • ページ名にファイル名として使えない記号が入っている

特にActiveDocument.Pathを使う場合は、先にVisioファイルを保存しておきましょう。

まとめ

Visio VBAでは、ExportAsFixedFormatを使って図面をPDFに保存できます。

指定するのは、ファイル形式・保存先・出力品質・ページ範囲の4つ。

visPrintCurrentPageなら現在のページ、visPrintAllならすべてのページをまとめて出力できます。

たった4つの引数でPDF化できるので、よく使う方はぜひマクロにしてみてください。ちょっぴり楽できますよ😊

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