【実務・中級編】【初心者向け】マクロ一発で複数ページを一括作成し、命名規則に従って自動リネームする方法 – Visio VBA解析バイブル

スポンサーリンク

Visioオートメーションの極意:ページ生成を「作業」から「資産」へ昇華させる

Visioでドキュメントを作成する際、手動でページを追加し、命名し、設定を整える……そんな「クリック作業」を繰り返していないか? もし君が業務効率化を志すエンジニアなら、その作業は今すぐコードに委ねるべきだ。

今日は、初心者が見落としがちな「Visioのオブジェクトライフサイクル」を意識した、堅牢かつ拡張性の高いページ一括生成アーキテクチャを伝授する。

—

1. なぜ「そのコード」では現場で破綻するのか

初心者が書くコードの多くは、単に `Pages.Add` を連呼するだけの脆弱なものだ。しかし、実務では以下のようなリスクが常に付きまとう。

  • 命名衝突のリスク: 既に同名のページが存在する場合、VBAは無慈悲にエラーを吐く。
  • ページ設定の不一致: ページごとに縮尺やグリッド設定がズレると、ドキュメントの品質が即座に損なわれる。
  • 保守性の欠如: プロジェクト管理番号(例: `PRJ-001_概要`)のような命名規則が変わった際、コードを書き直す羽目になる。

真のエンジニアは、「状態を確認し、安全に遷移させる」コードを書く。

—

2. 実装:堅牢なページ一括生成スクリプト

以下のコードは、単なるループ処理ではない。命名規則の変更に強く、エラーを未然に防ぐための「防御的プログラミング」を組み込んでいる。

Option Explicit

‘ プロジェクト管理番号に基づいたページ一括生成
Public Sub GenerateProjectPages()
Dim vsoDoc As Visio.Document
Dim vsoPage As Visio.Page
Dim pageNames As Variant
Dim i As Integer
Dim prefix As String

‘ 命名規則の基盤
prefix = “PRJ-001_”
‘ 生成したいページ名のリスト(ここを外部ファイルやDBから読み込むよう拡張可能にする)
pageNames = Array(“構成図”, “シーケンス”, “配置図”, “詳細仕様”)

Set vsoDoc = ActiveDocument

On Error Resume Next ‘ ページ存在時のエラー制御用

For i = LBound(pageNames) To UBound(pageNames)
Dim targetName As String
targetName = prefix & pageNames(i)

‘ 既存チェックと作成の分離
Set vsoPage = vsoDoc.Pages.Item(targetName)

If vsoPage Is Nothing Then
Set vsoPage = vsoDoc.Pages.Add
vsoPage.Name = targetName
‘ ページ設定の標準化(縮尺やサイズをここで強制適用する)
Call SetupPageProperties(vsoPage)
Debug.Print “Created: ” & targetName
Else
Debug.Print “Skipped: ” & targetName & ” (Already exists)”
End If

‘ オブジェクト参照のクリア
Set vsoPage = Nothing
Next i

On Error GoTo 0
MsgBox “ページ生成プロセスが完了しました。”, vbInformation
End Sub

‘ ページ設定を統一するヘルパー関数
Private Sub SetupPageProperties(ByRef pg As Visio.Page)
‘ 用紙サイズやスケールの設定を一元管理する
‘ ここを修正するだけで全ページに反映されるのが「保守性」の正体だ
With pg.PageSheet
.Cells(“PageWidth”).Formula = “297mm”
.Cells(“PageHeight”).Formula = “210mm”
End With
End Sub

—

3. チーフアーキテクトからの助言:さらなる高みへ

このコードをただコピペして満足してはいけない。実務の現場でさらに一歩先へ行くための「3つの規律」を刻んでおけ。

1. データの外部化を検討せよ

上記の `Array` に値を直接書くのは小規模開発までだ。本格的なツールにするなら、ExcelのリストやCSV、あるいはJSONから設定を読み込むように設計を変えるべきだ。コードを触らずに「ページ構成」だけを変えられるツールこそが、現場で重宝される。

2. ページオブジェクトの再利用性

`SetupPageProperties` を見よ。プロパティを個別に設定するのではなく、テンプレートとなる「マスターページ」を別ファイルに用意し、それをコピーして生成する手法も検討に値する。複雑なレイヤー設計やガイド線は、コードで記述するよりマスターから継承させる方が圧倒的にバグが少ない。

3. エラーハンドリングの徹底

大規模な自動化では、途中でファイルがロックされたり、保存容量が不足したりといった予期せぬエラーが必ず起きる。`On Error Resume Next` を多用しすぎず、`Err.Number` を監視し、ログをファイルに出力する仕組みを組み込むことが、真の「業務自動化エンジニア」への第一歩だ。

—

結びに:君のコードが誰かの時間を救う

VisioのVBAは古臭いと言われることもある。だが、オブジェクトモデルを深く理解し、堅牢なロジックを組む経験は、現代のどの言語でも通用する強力な武器になる。

このスクリプトを単なる「時短ツール」で終わらせるな。「誰が使っても同じ品質のドキュメントを生成できるシステム」として育て上げろ。君の書くコード一つで、プロジェクト全体の工数が数十時間単位で削減されるのだから。

健闘を祈る。

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