【入門編】【初心者向け】ページ名に「作成日」を自動付与して、図面管理を効率化する命名規則自動化ツール – Visio VBA解析バイブル

スポンサーリンク
スポンサーリンク

【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は単なる描画ツールから、あなたの強力な「自動化プラットフォーム」へと進化します。

一歩ずつ、確実に。あなたの自動化への旅を応援しています!

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