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

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

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

ということで
今回は、Visio VBAを使ってPDFを保存する方法をご紹介します。
現在のページだけ保存する方法と、複数ページをまとめて1つのPDFにする方法を見ていきましょう。
PDF保存に使う「ExportAsFixedFormat」とは
構文
Visio VBAでPDFを保存するときは、ExportAsFixedFormatメソッドを使います。
Document.ExportAsFixedFormat _
FixedFormat, _
OutputFileName, _
Intent, _
PrintRange

OutputFileNameに出力したいファイル名を指定するよ
今回使う主な引数はこちらです。
| 引数 | 指定する内容 |
|---|---|
| FixedFormat | PDF:visFixedFormatPDFXPS: 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化できるので、よく使う方はぜひマクロにしてみてください。ちょっぴり楽できますよ😊

