Visio VBAの深淵へ:Webエクスポートをコードで完全制御する
こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で意味不明なコードに頭を抱えたことはありませんか?今日からそのステージを卒業しましょう。
今回は、Visioの隠れた強力機能「SaveAsWeb(Webとして保存)」をVBAで自在に操る技術を伝授します。単にファイルを保存するだけでなく、パン・ズーム機能や検索ボックスを完備した「インタラクティブな図面」を一括で自動生成する。この領域をマスターすれば、あなたの業務効率は劇的に変わります。
—
1. Visioオブジェクトモデルの「階層構造」を理解する
コードを書く前に、Visioがどう世界を見ているかを知る必要があります。Visioは「入れ子構造」の塊です。
- Application: Visioそのもの(神の視点)
- Document: 開いているファイル(図面ファイル)
- Page: ファイルの中の各ページ(キャンバス)
- Shape: ページ上に置かれた図形(最小単位)
今回の目標である「Web保存」は、`Document`オブジェクトが持つ機能です。これを呼び出すためには、まず今開いているドキュメントを特定する、という順序になります。
—
2. SaveAsWebを制御する「VISWEB_CREATE_DOC_MESSAGES」の正体
実は、VBAから「Webとして保存」を制御するには、標準の `SaveAs` メソッドではなく、`VisSaveAsWeb` という専用のアドオンオブジェクトを利用します。
ここが初学者の最初の壁ですが、恐れることはありません。「設定」と「実行」の2ステップで考えると非常にシンプルです。
実践コード:一括Web出力エンジン
以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。
Sub ExportToWebInteractive()
‘ Webエクスポートを司るオブジェクトを生成
Dim vsoSaveAsWeb As Object
Set vsoSaveAsWeb = Application.Addons(“SaveAsWeb”)
‘ Web保存用オブジェクトの操作(WebSettings)
Dim vsoWebSettings As Object
Set vsoWebSettings = vsoSaveAsWeb.WebSettings
‘ 出力設定のカスタマイズ
With vsoWebSettings
.LongFileNames = True ‘ 長いファイル名を許可
.StoreInFolder = True ‘ 専用フォルダを作成
.OpenInBrowser = False ‘ 出力後に自動でブラウザを開かない
.QuietMode = True ‘ 途中のダイアログを表示しない(自動化の肝)
.IncludeZoomControl = True ‘ ズーム・パン機能の付与
.IncludeSearch = True ‘ 検索機能の有効化
.TargetFolder = “C:\Output\VisioWeb\” ‘ 出力先パス
End With
‘ 実行(現在のドキュメントを対象にする)
‘ ※必ず事前に対象のドキュメントを保存しておくこと
vsoSaveAsWeb.CreatePage vsoWebSettings
MsgBox “Webエクスポートが完了しました!”, vbInformation
End Sub
—
3. ここで躓くな!プロが教える「陥りやすい罠」
このコードを動かす際に、多くの人がハマるポイントがあります。
① 未保存ファイル問題
VisioのWeb出力エンジンは、ファイルが一度も保存されていない(パスが確定していない)状態だとエラーを吐くことがあります。必ず `ActiveDocument.Path` が存在する状態で実行してください。
② アドオンの存在確認
`Application.Addons(“SaveAsWeb”)` は、Visioの標準インストール構成に依存します。もしエラーが出る場合は、[ファイル] > [オプション] > [アドイン] で「Visio Save as Web」が有効になっているか確認してください。
③ 出力先のパス問題
`TargetFolder` に指定するパスは、必ず最後にバックスラッシュ(\)を付けてください。また、フォルダが存在しないとエラーになるため、事前に `MkDir` 関数でフォルダを作成するロジックを挟むのが「現場の作法」です。
—
4. 次のステージへ:一括変換の自動化
もしあなたが「フォルダ内にある全Visioファイルを一気にWeb化したい」と思ったら、`FileSystemObject` を使ってフォルダ内のファイルをループ処理します。
‘ ヒント:Dir関数やFSO(FileSystemObject)と組み合わせることで
‘ 夜間に100個のファイルを自動でWeb変換する、といったタスクが可能です。
最後に:自動化は「道具」ではなく「思考」
VBAを使いこなすということは、単に便利なコードを書くことではありません。「自分が行っていた退屈なクリック操作を、Visioのオブジェクトモデルに翻訳する」という思考法を身につけることです。
今回の `SaveAsWeb` の制御は、Web共有が当たり前の今の時代の必須スキルです。ぜひ、あなたの図面を「静止画」から「誰もが検索・拡大できるインタラクティブな資産」へと進化させてみてください。
また何か壁にぶつかったら、いつでもここへ戻ってきてください。あなたの自動化の旅を、私はいつでも応援しています。
