【Visio VBA極意】開いている全図面のページ数を即座に集計し、PDF出力の「事故」を未然に防ぐ自動化術
こんにちは。現場の最前線で自動化を推進しているエンジニアです。
「Visioで大量のファイルを開いて作業しているとき、結局どれが何ページあるのか分からなくなる」「PDFに出力した後にページ抜けに気づいて青ざめる」……そんな経験はありませんか?
今回は、Visio VBAを使って、開いている全ファイルの構成を瞬時に把握し、ログとして書き出すという、自動化の第一歩にして最強の「守りのツール」を伝授します。
マクロの記録ボタンを押すだけの日々は今日で卒業しましょう。VBAの「心臓部」に触れる準備はいいですか?
—
1. なぜ「開いている全図面」を管理する必要があるのか
Visioはオブジェクト指向に基づいたアプリケーションです。私たちが普段見ている「図面(Document)」は、背後で巨大な階層構造(Application > Documents > Pages)として管理されています。
手作業でプロパティを確認するのは非効率なだけでなく、ヒューマンエラーの温床です。今回作成するツールは、以下の3ステップで「図面の状態」を可視化します。
1. 開いている全ドキュメントをループで回す
2. 各ドキュメントが持つページ数をカウントする
3. 結果をテキストファイル(ログ)としてデスクトップに吐き出す
—
2. 現場で使える「集計マクロ」の全貌
以下のコードをVBAエディタ(`Alt + F11` で起動し、挿入 > 標準モジュール)に貼り付けてください。
Option Explicit
‘ ==========================================
‘ 機能: 開いている全図面のページ数を集計し、ログに出力する
‘ 著者: Visio自動化アーキテクト
‘ ==========================================
Sub ExportDocumentReport()
Dim doc As Visio.Document
Dim logPath As String
Dim fileNum As Integer
‘ ログファイルの保存先をデスクトップに設定
logPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\Visio_Page_Report.txt”
fileNum = FreeFile
‘ ファイル書き込みモードで開く
Open logPath For Output As #fileNum
Print #fileNum, “— Visio 図面ページ数レポート —”
Print #fileNum, “作成日時: ” & Now
Print #fileNum, “———————————”
‘ Application.Documents は、開いているすべてのファイルを持つコレクション
For Each doc In Application.Documents
‘ 各ドキュメントの名前とページ数をログに記録
Print #fileNum, “ファイル名: ” & doc.Name
Print #fileNum, “ページ数: ” & doc.Pages.Count
Print #fileNum, “———————————”
Next doc
Close #fileNum
MsgBox “レポートを出力しました:” & vbCrLf & logPath, vbInformation
End Sub
—
3. コードの「魂」を読み解く:3つのポイント
初心者の方が必ず理解すべき「VBAの作法」がここに詰まっています。
① `For Each` ループの威力
`For Each doc In Application.Documents`
これは、「開いている全ドキュメントを順番に『doc』という名前の変数に入れて処理しなさい」という命令です。何個ファイルが開いていても自動で追従する、自動化の基本中の基本です。
② `FreeFile` という気遣い
`fileNum = FreeFile`
ファイルを保存する際に「1番」といった番号を直接指定すると、他の処理と競合する可能性があります。`FreeFile`は、システム内で今空いている「安全な番号」を自動で取得してくれる関数です。これができると、一気にエンジニアっぽくなります。
③ オブジェクトの階層構造
`doc.Pages.Count`
Visioのオブジェクトモデルを理解する鍵です。ドキュメントの中にページという「箱」があり、その数を数える(Count)という構造を意識するだけで、図形操作も自由自在になります。
—
4. 陥りやすいエラーと対策
- 「変数が定義されていません」と出る
`Option Explicit` を記述しているためです。これは「宣言していない変数は使わせない」という、バグを未然に防ぐための強力な設定です。必ず `Dim` で変数を宣言しましょう。
- 権限エラーで保存できない
ログの出力先フォルダに書き込み権限がない場合があります。まずはコード通り「デスクトップ」に出力するのが一番安全です。
—
5. 次のステップへ
このコードをマスターしたら、次は「特定のページ数以上だったらアラートを出す」「PDF出力後にファイル名とページ数をExcelに転記する」といった応用が待っています。
自動化は、「面倒くさい」という感情を「仕組み」に変える作業です。まずはこのツールを自分の手で動かし、Visioという巨大なシステムを自分のコントロール下に置く快感を味わってください。
ここをクリアしたあなたは、もうただのユーザーではありません。「図面を操るエンジニア」の入り口に立っています。
何か詰まったら、いつでも戻ってきてくださいね。応援しています!
