こんにちは!Visioの自動化を極める旅へようこそ。
これまで、個別の図面ファイル(.vsdm)にマクロを埋め込み、自分のパソコンだけで図面整理やPDF出力を自動化してきたことと思います。
「この便利なツール、チームのメンバーにも使ってもらいたいな」
そう思った時、マクロ入りのファイルをそのまま配ると、どうなるでしょう?
「マクロのセキュリティ警告が出て動かない」「誰かがコードをうっかり書き換えて壊してしまった」「新しいバージョンを配るたびに各人の設定がリセットされる」……現場のエンジニアなら誰もが頭を抱える悪夢の始まりです。
今回は、プロの現場で使われている「VSSM(マクロ有効ステンシル)を活用したアドイン化」と、「リボンメニューからのPDF出力制御」の極意を伝授します。
ここをクリアすれば、あなたの作ったVisioツールは、一気に「製品レベルの業務用パッケージ」へと生まれ変わります。一緒に本質をマスターしていきましょう!
—
1. なぜ「VSSMアドイン」なのか?(基本概念の整理)
多くの初学者が陥る罠は、`.vsdm`(マクロ有効図面)の中にコードを書き続けることです。しかし、配布用ツールを作るなら選択肢は一つ、`.vssm`(マクロ有効ステンシル)をVisioの起動時フォルダ(Startup)に配置する手法です。
アーキテクチャの比較
- VSDM方式(個人用): ファイルごとにコードが依存。コードのアップデートが困難。
- VSSMアドイン方式(配布用): Visio起動時にバックグラウンドで常駐し、どんな図面を開いていても「専用のリボン」と「共通の機能」を提供できる。
「ステンシルって、図形を置いておくパレットじゃないの?」と思った方、素晴らしい着眼点です。実はVisioのステンシルは、裏でVBAコードを保持し、イベントをフックし、独自のUI(リボン)を描画する最強のプログラムコンテナになり得ます。
—
2. 配布用パッケージの全体像
私たちが目指すゴールは以下の構成です。
1. マクロ有効ステンシル(`EnterpriseTools.vssm`)を作成する。
2. その中に、PDF出力や独自保存を制御する標準モジュール(`PdfExportModule`)を配置する。
3. RibbonX(XML)を用いて、Visioのリボンメニューに専用タブ「業務支援」を追加し、ボタンを押すとVBAが走るようにする。
4. このファイルを会社の共有サーバーやインストーラー経由で、全メンバーのVisioスタートアップフォルダに配布する。
—
3. 実装コード:堅牢なPDF出力エンジンの構築
まずは、エンジンの心臓部となるVBAコードを書きましょう。
ただPDFを出力するだけなら一行ですが、実務では「図面の保存先チェック」「レイヤーやページの制御」「エラーハンドリング」が不可欠です。
以下のコードを、VSSM内の標準モジュールに記述してください。
Option Explicit
‘ =========================================================================
‘ 業務標準:高品質PDFエクスポート&保存制御エンジン
‘ =========================================================================
Public Sub ExportActiveDocToStandardPDF()
Dim targetDoc As Visio.Document
Dim sourcePath As String
Dim pdfPath As String
Dim fso As Object
‘ エラーハンドリングの要
On Error GoTo ErrorHandler
‘ 1. アクティブな図面の取得と検証
If Visio.Application.Documents.Count = 0 Then
MsgBox “処理対象となる図面が開かれていません。”, vbExclamation, “PDF出力エラー”
Exit Sub
End If
Set targetDoc = Visio.Application.ActiveDocument
‘ 2. 未保存(新規作成のまま一度も保存されていない)図面のガード
If targetDoc.Path = “” Then
MsgBox “この図面はまだ保存されていません。” & vbCrLf & _
“一度名前を付けて保存してからPDF出力を行ってください。”, vbExclamation, “保存確認”
Exit Sub
End If
‘ 3. 出力パスの動的生成(同階層の「PDF」フォルダに自動保存)
Set fso = CreateObject(“Scripting.FileSystemObject”)
sourcePath = targetDoc.Path
‘ PDF格納用サブフォルダがなければ作成する
If Not fso.FolderExists(sourcePath & “PDF”) Then
fso.CreateFolder sourcePath & “PDF”
End If
‘ 拡張子を.vsdmから.pdfへ置換
Dim baseName As String
baseName = fso.GetBaseName(targetDoc.Name)
pdfPath = sourcePath & “PDF\” & baseName & “_” & Format(Now, “yyyymmdd_hhnnss”) & “.pdf”
‘ 4. VisioネイティブのPDFエクスポート実行
‘ (VisioのExportメソッドは、印刷設定やページ範囲を忠実に反映します)
targetDoc.ExportAsFixedFormat Visio.VisFixedFormatTypes.visFixedFormatPDF, _
pdfPath, _
Visio.VisPrintixen.visPrintAllPages, _
Visio.VisOpenDoc.visOpenHidden
MsgBox “PDFの出力が完了しました!” & vbCrLf & pdfPath, vbInformation, “成功”
Exit Sub
ErrorHandler:
‘ 予期せぬエラーの捕捉
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “システムエラー”
End Sub
コードのポイント解説
- `targetDoc.Path = “”` のチェック: 初学者が最も踏みやすい地雷が、未保存のドキュメントに対するパス操作エラーです。ここで優しく弾くことで、ユーザーのイライラを防ぎます。
- `Scripting.FileSystemObject`: VBAからファイルシステムを安全に操作するための定番オブジェクト。PDF専用の保存フォルダを自動生成するスマートな実装です。
- タイムスタンプの付与: 同名ファイルの競合を防ぐため、出力ファイル名に `yyyymmdd_hhnnss` を付与しています。バージョン管理のトラブルが激減します。
—
4. リボンメニュー(UI)からの制御
VBAを書いただけでは、ユーザーは「Alt + F8」を開いてマクロを探さなければなりません。これでは一般のメンバーにとってハードルが高すぎます。
プロのツールは、「リボン」に専用のボタンを用意するのが鉄則です。
Visioのリボンカスタマイズには RibbonX(XML) を使用します。VSSMファイルのカスタムUIパーツに以下のXMLを埋め込みます。
※RibbonXの実装には、外部ツール(「Custom UI Editor for Microsoft Office」など)を使うと、VSSMファイルに直接XMLを埋め込むことができて非常にスムーズです。
—
5. 現場へ配布する際の極意とセキュリティ対策
さて、コードとUIが完成したら、いよいよ全ユーザーへ配布です。ここがエンジニアの腕の見せ所。
1. 保存形式の魔術
ファイルを保存する際、拡張子を必ず `.vssm`(マクロ有効ステンシル) にしてください。
これをユーザーの Visioスタートアップフォルダ(通常は `C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\AddIns` や、Officeのスタートアップパス)に配置します。
スタートアップに置かれたVSSMは、Visio起動時にバックグラウンドのステンシルとして静かに読み込まれ、常駐マクロとして機能します。ユーザーが意識して開く必要すらありません。
2. トラストセンター(信頼できる場所)の設定
企業環境では、マクロセキュリティが厳しく設定されています。配布するPC群に対して、あらかじめGPO(グループポリシー)やスクリプトで、先ほどのネットワークフォルダやアドインフォルダを「信頼できる場所(Trusted Locations)」に登録しておく必要があります。ここを怠ると、「マクロが無効化されました」という問い合わせが殺到するので注意してください。
—
まとめ:ここをクリアすれば、あなたもVisio自動化マスター!
お疲れ様でした!今回は以下のステップを駆け抜けました。
- 単なるマクロ付き図面(VSDM)から、全社共通で使えるアドイン(VSSM)への昇華
- 実務に耐えうる、安全で堅牢なPDFエクスポート・エラーハンドリングの実装
- RibbonXによる、プロフェッショナルなUI(リボンメニュー)の統合
「マクロの記録」から始まった自動化の旅路も、ここまで来れば立派な業務システム開発です。あなたが作ったこのパッケージは、チーム全体の生産性を何倍にも跳ね上げる強力な武器になるでしょう。
ここをクリアしたあなたなら、もうVisio VBAの基本はバッチリです!
ぜひ、日々の業務を劇的にハックするオリジナルのアドイン開発に挑戦してみてくださいね。次回の応用編もお楽しみに!
