【Visio自動化の第一歩】ファイル名に日時を刻印せよ!版管理を自動化する魔法のVBA
こんにちは。業務自動化の世界へようこそ。
Visioの図面を毎回「名前を付けて保存」から日付を手入力してPDF化する……そんな「手作業の儀式」に時間を奪われていませんか?
「マクロの記録」ボタンを押すだけの世界から一歩抜け出し、自分自身でコードを操れるようになると、Visioは単なる作図ツールから「最強のドキュメント生成エンジン」へと変貌します。
今日は、「PDF出力時に現在日時を自動付与して保存する」という、実務で最も要望が多く、かつ最も重要な自動化の基本を伝授します。ここをクリアすれば、あなたはもう「自動化の入り口」に立っていますよ。
—
1. なぜ「現在日時」をファイル名に入れるのか?
プロの現場で最も恐ろしいのは、「どれが最新のファイルかわからない」という事態です。
`図面.pdf`、`図面_修正.pdf`、`図面_最終.pdf`……。これでは誰も管理できません。
今回作成するコードの目的は、「誰がいつ見ても、これがいつ作成されたのかが一目でわかる」という状態を、100%の精度で機械に保証させることです。
—
2. さあ、コードを書いてみよう
VBAの環境を開いてください(Alt + F11)。標準モジュールを挿入し、以下のコードをコピー&ペーストしてみましょう。
Sub ExportPdfWithTimestamp()
Dim doc As Visio.Document
Dim path As String
Dim fileName As String
Dim timeStamp As String
‘ 現在のドキュメントを対象にする
Set doc = ActiveDocument
‘ 保存先のパス(必要に応じて変更してください)
‘ 例: C:\Users\Name\Desktop\
path = “C:\Reports\”
‘ 現在の日時を YYYYMMDD_HHMMSS 形式で取得
‘ Format関数はVBAにおける「日時の翻訳機」です
timeStamp = Format(Now, “yyyymmdd_hhmmss”)
‘ ファイル名の構築(拡張子を含めない名前 + 日時)
‘ Left(doc.Name, InStr(doc.Name, “.”) – 1) で拡張子を除去します
fileName = path & Left(doc.Name, InStr(doc.Name, “.”) – 1) & “_” & timeStamp & “.pdf”
‘ PDFとしてエクスポート
‘ FixedFormat はVisioのPDF出力専用の強力なメソッドです
On Error Resume Next ‘ エラー時の停止を防ぐための防波堤
doc.ExportAsFixedFormat visFixedFormatPDF, fileName
If Err.Number = 0 Then
MsgBox “出力成功: ” & fileName, vbInformation
Else
MsgBox “エラー発生: 保存先フォルダが存在するか確認してください。”, vbCritical
End If
On Error GoTo 0
End Sub
—
3. コードの「魂」を解説します
初心者がつまづきやすいポイントを、エンジニアの視点で噛み砕きます。
- `Format(Now, “yyyymmdd_hhmmss”)` の正体
`Now`は、PCが持っている現在時刻を「シリアル値」という数字の羅列で返します。それを人間が読みやすい形式に翻訳するのが`Format`関数です。`yyyy`(年)、`mm`(月)、`dd`(日)、`hh`(時)、`nn`(分※)、`ss`(秒)と覚えるだけで、あらゆるファイル管理が自由自在になります。
※VBAでは「分」は`m`ではなく`n`を使います。ここ、試験に出るほど重要です!
- `InStr(doc.Name, “.”) – 1` の意味
Visioのファイル名には必ず`.vsdx`といった拡張子が含まれます。そのままファイル名に連結すると`図面.vsdx_20231027.pdf`のような不格好な名前になってしまいます。`InStr`でドットの位置を探し、その手前で文字列を切り取ることで、美しいファイル名を生成しています。
- `On Error Resume Next` の哲学
プログラムは「想定外」に弱いです。保存先のフォルダがなかったり、ファイルが書き込み禁止だったりすると、そこで処理が止まります。あえてエラーを無視して後続の`If Err.Number`で判定する手法は、大規模な自動化システムでも使われる「堅牢なコード」への第一歩です。
—
4. 陥りやすい「罠」とその回避策
1. 保存先フォルダが存在しない
コードで指定した `C:\Reports\` がPCに存在しない場合、エラーになります。まずはパスを自分のデスクトップなどに書き換えて試してください。
2. ファイルが保存中である
PDFファイルをPDFビューワーで開いたままマクロを実行すると、上書きできずにエラーになることがあります。出力時はビューワーを閉じる癖をつけましょう。
—
最後に:自動化は「小さな成功体験」の積み重ね
どうでしたか?ボタン一つで、正確な日時が刻まれたPDFが生成される様子は、まさに魔法のようだったはずです。
このコードをベースに、次は「複数の図面をまとめてPDF化する」や「特定のページだけを書き出す」といった応用へと進んでいけます。VBAは、あなたの思考を即座に形にしてくれる最強のパートナーです。
まずはこのコードを自分のPCで動かしてみてください。その「動いた!」という感動こそが、あなたを一流の自動化エンジニアへと押し上げる原動力になります。
応援していますよ。何かあれば、またいつでも聞きに来てくださいね。
