【入門編】【初心者向け】開いている全Visioドキュメントをループ処理で一括PDF変換・保存する方法 – Visio VBA解析バイブル

スポンサーリンク

こんにちは。自動化の世界へようこそ。
Visioのマクロ記録機能で生成されたコードを見て、「なぜこんなに冗長なのか?」と疑問に思ったことはありませんか?

Visio VBAは、オブジェクトの階層構造さえ理解してしまえば、驚くほど軽快に動く強力な武器になります。今回は、あなたのPCで開いている「すべてのVisio図面」を一瞬でPDF化する、実務直結型の自動化術を伝授します。

—

1. なぜ「Documentsコレクション」を使うのか?

Visioにおいて、現在開いている全てのファイルは`Documents`という「箱(コレクション)」の中に格納されています。

初心者の方がやりがちなのは「フォルダ内のファイルを一つずつ開いて閉じて…」という処理ですが、それだとファイルを開くたびにVisioの描画エンジンが起動し、パフォーマンスが著しく低下します。「すでに開いているなら、そのメモリ上のオブジェクトを叩く」。これがプロの自動化の第一歩です。

—

2. 全PDF変換・保存スクリプト

以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。

Sub BatchExportToPDF()
Dim doc As Visio.Document
Dim targetPath As String
Dim pdfPath As String

‘ エラーハンドリング:ファイルがない場合などの予期せぬ停止を防ぐ
On Error Resume Next

‘ Documentsコレクションをループして全ドキュメントを走査
For Each doc In Visio.Application.Documents

‘ 未保存のドキュメント(パスがない)はスキップする安全策
If doc.Path <> “” Then
‘ 元のファイル名(拡張子なし)を取得し、PDFのパスを構築
targetPath = doc.Path & Left(doc.Name, InStrRev(doc.Name, “.”) – 1)
pdfPath = targetPath & “.pdf”

‘ PDF出力実行(FixedFormatメソッド)
‘ visFixedFormatPDF: PDF形式を指定
‘ visDocExportAll: 全ページを対象
doc.ExportAsFixedFormat visFixedFormatPDF, pdfPath, visDocExportAll

Debug.Print “出力完了: ” & pdfPath
End If
Next doc

On Error GoTo 0
MsgBox “すべてのPDF出力が完了しました。”, vbInformation
End Sub

—

3. コードの「極意」を紐解く

この短いコードには、実務でトラブルを避けるための重要なポイントが詰まっています。

  • `For Each doc In Visio.Application.Documents`

これが今回の心臓部です。`For i = 1 to Documents.Count` と書くよりも、コレクション全体を直接なめる `For Each` の方がコードが読みやすく、予期せぬインデックスエラーも防げます。

  • `doc.Path <> “”` のチェック

ここが初心者と中級者の分かれ道です。新規作成したばかりで一度も保存していないファイルには `Path` が存在しません。ここに気づかずに処理を走らせるとエラーで落ちますが、この判定を入れるだけで「既存ファイルのみを安全に処理する」堅牢なコードになります。

  • `ExportAsFixedFormat` メソッド

「マクロの記録」を使うと非常に複雑な設定コードが生成されますが、基本的にはこの一行だけで十分です。エンジニアは「不要な引数を削ぎ落とす」ことで、メンテナンス性を高めます。

—

4. 初心者が陥りやすい罠と解決策

Q: エラーにならないのにPDFが生成されません。

A: 「フルパス」の指定を確認してください。
`doc.Path` はファイルが保存されているフォルダパスを返しますが、末尾の `\`(円マーク)が含まれているか確認してください。もし含まれていない場合は、 `doc.Path & “\” & …` と連結する必要があります。

Q: 特定の図面だけ除外したい場合は?

A: `If` 文の中に条件を追加するだけです。

If doc.Name <> “Template.vsdx” Then
‘ ここに処理を書く
End If

このように、`doc.Name` を条件判定に使うことで、特定のファイルだけを対象外にするなどの柔軟な制御が可能です。

—

最後に:自動化の先にあるもの

このコードをマスターすれば、次は「フォルダ内の全ファイルを自動で開いてPDF化する」という応用にも簡単に進めます。

Visio VBAは、単なる「作業の代行」ではなく、「あなたの思考を形にするための補助脳」です。最初はエラーが出ても構いません。そのエラー一つ一つが、Visioの内部構造を知るための最高の教科書になります。

さあ、このコードをコピーして、あなたの業務の「退屈な時間」をハックしてみてください。何か詰まったら、いつでも戻ってきてくださいね。応援しています。

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