【入門編】【上級者向け】SQL Serverから取得したデータに基づき、テンプレートから動的に図面を生成・保存するパイプライン – Visio VBA解析バイブル

スポンサーリンク

Visio VBAで構築する「動的図面生成パイプライン」:DBデータから自動作図への招待状

こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアです。

皆さんは「マクロの記録」で生成された、あの冗長で不安定なコードに限界を感じていませんか?「図面を一つずつ手作業で保存する」「DBの情報を一つずつコピペする」……そんな作業は、今日で卒業しましょう。

今回は、SQL Serverから取得したデータを元に、Visio図面を自動生成し、PDFとして書き出す「エンタープライズ級のパイプライン」を構築する極意を伝授します。

—

1. なぜ「テンプレート」から始めるのか?

初心者の方は空のドキュメントにゼロからシェイプを描こうとしますが、これは悪手です。Visioの真骨頂は「マスターシェイプ」にあります。

極意: テンプレートファイル(.vstx)を一つ作り、そこに複雑なコネクタの挙動やデータグラフィックの定義を閉じ込めておきましょう。VBAの役割は、その「完成された殻」の中にデータを流し込むことだけです。

—

2. 構築の全体像:データフローの設計

1. ADO(ActiveX Data Objects): SQL Serverへの接続とクエリ実行。
2. テンプレートのロード: `Documents.AddEx` で雛形を開く。
3. シェイプのドロップ: `Drop` メソッドによるマスターシェイプの配置。
4. プロパティの書き込み: `Cells` または `Characters` プロパティでのデータ流し込み。
5. エクスポート: `Export` メソッドでのPDF生成。

—

3. 実装:動的生成パイプラインの心臓部

以下のコードは、DBから取得したリストを元に、テンプレート上の「サーバー」というマスターシェイプを並べる一例です。

Sub GenerateDrawingFromDB()
‘ 参照設定: Microsoft ActiveX Data Objects x.x Library を追加してください
Dim conn As Object, rs As Object
Dim visApp As Visio.Application
Dim doc As Visio.Document
Dim page As Visio.Page
Dim shp As Visio.Shape
Dim stencil As Visio.Master

‘ 1. DB接続とデータ取得
Set conn = CreateObject(“ADODB.Connection”)
conn.Open “Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=DBName;Integrated Security=SSPI;”
Set rs = conn.Execute(“SELECT ServerName, IPAddress FROM Servers”)

‘ 2. テンプレートから新規図面作成
Set visApp = Application
Set doc = visApp.Documents.Add(“C:\Templates\Infrastructure.vstx”)
Set page = doc.Pages(1)

‘ 3. マスターシェイプの取得(ここが最重要!)
‘ 「基本図形」ステンシル内の「サーバー」という名前のマスターを読み込む
Set stencil = visApp.Documents.OpenEx(“Basic_Shapes.vssx”, visOpenRO Or visOpenDocked).Masters(“Server”)

‘ 4. データに基づきシェイプを配置
Dim x As Double: x = 1
Dim y As Double: y = 8

Do Until rs.EOF
Set shp = page.Drop(stencil, x, y)
shp.Text = rs(“ServerName”) & vbCrLf & rs(“IPAddress”)

y = y – 1 ‘ 下にずらしていく
rs.MoveNext
Loop

‘ 5. PDFとして出力
doc.ExportAsFixedFormat visFixedFormatPDF, “C:\Exports\Infrastructure.pdf”

‘ クリーンアップ
rs.Close: conn.Close
MsgBox “図面の自動生成が完了しました!”
End Sub

—

4. 現場で陥りやすい「3つの落とし穴」

① 「参照設定」の呪縛

ADOを使用する場合、VBAエディタの「ツール」→「参照設定」から `Microsoft ActiveX Data Objects` にチェックを入れないと `ADODB.Connection` は動きません。しかし、配布を考えるなら `CreateObject` による「遅延バインディング」が安全です。

② シェイプの「保護」を考慮せよ

テンプレートのシェイプに「保護(ロック)」がかかっていると、VBAからテキストを書き換えようとしてエラーになります。開発時は、マスターシェイプのプロパティで「テキストの編集」が許可されているか必ず確認してください。

③ オブジェクトの解放を怠るな

大量の図面を生成する際、`Set = Nothing` を省略するとメモリリークが発生し、Visioが重くなります。特に `Document` や `Recordset` は必ず明示的に解放しましょう。

—

最後に:先輩からのアドバイス

「プログラムを書くこと」と「業務を自動化すること」は違います。
今回のようなパイプラインを構築する際は、まず「手作業で、どの順序で操作しているか」を紙に書き出してください。 その操作の一つ一つが、VBAのメソッドに一対一で対応します。

Visio VBAは、一度習得すれば、あなたのエンジニアとしての価値を数倍に引き上げる強力な武器になります。最初はエラーが出て当たり前です。そのエラーこそが、Visioの深淵へ近づいている証拠なのですから。

さあ、次はどの図面を自動化しますか?応援していますよ。

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