【Visio VBA入門】ページ名に「作成日」を自動付与して、図面管理をスマートにする方法
こんにちは。現場の自動化を指揮するアーキテクトです。
Visioを使って図面を作成しているとき、こんな悩みを持ったことはありませんか?
「ページが増えてくると、どれがいつ作った図面か分からなくなる……」
「『ページ-1』『ページ-2』という名前のまま管理するのは、もう限界だ……」
これらは、設計業務の規模が大きくなればなるほど深刻な問題になります。手作業で名前を付けて回るのは、エンジニアの貴重な時間を浪費する「非生産的な作業」です。
今日は、そんな課題を解決する最初の一歩として、「新しいページを作成し、そのページ名に『作成日』を自動で刻印する」という、実務で即戦力となるツールを一緒に作っていきましょう。
マクロの記録機能(レコーダー)から一歩踏み出し、VBAの「オブジェクト」という概念を理解すれば、あなたのVisio操作は劇的に変わります。ここをクリアすれば、Visio VBAの基本はバッチリですよ。
1. なぜ「マクロの記録」だけでは足りないのか?
多くの初心者は、まず「マクロの記録」ボタンを押します。確かに、記録されたコードを見れば「何が起きたか」は分かります。しかし、記録されたコードには、「なぜそのコードが必要なのか」という設計思想(ロジック)が欠落しています。
例えば、ページの名前を変えるとき、記録されたコードは単に「特定の名前を特定の名前へ書き換える」という、極めて限定的な命令になりがちです。
私たちが目指すべきは、「状況に応じて、動的に名前を生成する」という、柔軟なプログラムです。そのためには、Visioが持つ「オブジェクト(物)」を、プログラムの変数として捉える感覚が必要です。
2. 実装するロジックの設計図
今回のツールが実行するステップは、非常にシンプルです。
1. 新しいページをドキュメントに追加する
2. 「今日の日付」を取得し、扱いやすい文字列(例:20231027)に変換する
3. 追加したページの「Name」プロパティに、日付を結合して書き込む
この「追加して、捕まえて、名前を変える」という流れが、VBAにおけるオブジェクト操作の基本中の基本です。
3. 【実践】日付自動付与コード
それでは、実際に動くコードを見てみましょう。以下のコードを、VisioのVBAエディタ(Alt + F11)の標準モジュールに貼り付けてみてください。
Option Explicit
''' <summary>
''' 新しいページを作成し、名前に作成日を自動付与するマクロ
''' </summary>
Sub AddPageWithDate()
Dim doc As Visio.Document
Dim newPage As Visio.Page
Dim dateString As String
Dim newName As String
' 1. 現在のドキュメントをオブジェクトとして取得
' これにより、操作対象を明確にします
Set doc = ActiveDocument
' 2. 今日の日付を取得し、書式を整える
' Format関数を使うことで、「2023/10/27」ではなく「20231027」のような
' ファイル名やページ名に適した形式に変換できます
dateString = Format(Date, "yyyymmdd")
' 3. 新しいページを追加
' Addメソッドは、新しく作ったページの「参照(住所のようなもの)」を返してくれます
Set newPage = doc.Pages.Add
' 4. 新しいページの名前を決定する
' 「作成日_」という接頭辞を付けて、管理しやすくします
newName = "図面_" & dateString
' 5. ページ名を変更する
' ここでエラーが発生する可能性があるため、実務ではエラーハンドリングが重要です
On Error Resume Next
newPage.Name = newName
' エラーチェック:もし同じ名前のページが既に存在する場合など
If Err.Number <> 0 Then
MsgBox "エラー: ページ名 '" & newName & "' は既に存在するか、使用できない文字が含まれています。" & vbCrLf & _
"名前を '図面_" & dateString & "_" & Format(Now, "hhmmss") & "' に変更を試みます。", vbExclamation
' 重複を避けるため、時刻(時分秒)を付与してリトライ
newPage.Name = "図面_" & dateString & "_" & Format(Now, "hhmmss")
End If
On Error GoTo 0
' 完了通知
MsgBox "新しいページを作成しました: " & newPage.Name, vbInformation
End Sub
4. コードの深層解説:プロの視点
この短いコードの中に、プログラミングの重要なエッセンスが詰まっています。
① `Set` キーワードの重要性
`Set newPage = doc.Pages.Add` という部分に注目してください。VBAにおいて、数値や文字列などの「値」を代入するときは単に `=` を使いますが、ページやドキュメントといった「オブジェクト(実体のあるモノ)」を扱うときは、必ず `Set` を使います。
これを忘れると、「モノそのもの」ではなく「モノのコピー」を扱おうとしてエラーになります。オブジェクトのライフサイクルを制御する第一歩です。
② `Format` 関数による文字列操作
`Format(Date, “yyyymmdd”)` は、日付データを「ただの文字列」へと変換する魔法の杖です。
日付型(Date型)のままだと、スラッシュ `/` などが含まれてしまい、システムによってはページ名として不適切な場合があります。あらかじめ「名前として使いやすい形」に整えておくのが、堅牢なツールを作るコツです。
③ エラーハンドリング(防御的プログラミング)
ここが「初心者」と「プロ」の分かれ道です。
もし、同じ日に2回このマクロを実行したらどうなるでしょうか? Visioは「同じ名前のページは作れません!」と怒って、プログラムを強制終了させてしまいます。
コード内の `On Error Resume Next` は、「もしエラーが起きても、パニックにならずに次の行へ進め」という指示です。エラーを検知し、回避策(時刻を付与する等)を講じることで、ユーザーにストレスを与えない「止まらないツール」を実現しています。
5. 次のステップへ:さらに効率化するために
このツールをマスターしたら、次はこんな機能を追加してみるのも面白いですよ。
- レイヤーの自動設定: 新しいページを作ると同時に、特定のレイヤーを非表示にする。
- テンプレートの適用: 特定の枠線やタイトルブロックが配置された状態でページを開始する。
- 一括作成: 1週間分のページを、日付付きでまとめて作成する。
これらはすべて、今回学んだ「オブジェクトを取得して、プロパティ(名前や設定)を書き換える」というロジックの組み合わせで実現できます。
まとめ
「ページ名に日付を付ける」という小さな自動化。しかし、これは単なる作業軽減ではありません。「データの一貫性を保ち、管理コストを下げる」という、エンジニアリングの本質に触れる行為です。
マクロの記録から脱却し、オブジェクトを自在に操れるようになれば、Visioは単なる描画ツールから、あなたの強力な「自動化プラットフォーム」へと進化します。
一歩ずつ、確実に。あなたの自動化への旅を応援しています!
