こんにちは! Visio VBAの世界へようこそ。
マクロの記録ボタンを押して「動いたはいいけれど、中身が呪文のようで手が出せない……」そんなもどかしさを感じていませんか?
大丈夫です。ここをクリアすれば、Visio VBAの基本はバッチリですよ。
今回は、すべての自動化の起点となる`Application`オブジェクトの正体を暴き、ドキュメントの新規作成からオープン、保存までを自分の手でコントロールする方法を、世界最高峰のエンジニア視点で優しく、かつ深く解説していきます。
—
1. Visioオブジェクトモデルの「ピラミッド構造」を掴む
VBAでVisioを操るということは、Visioという巨大なビル(アプリケーション)の管理人になるようなものです。まずは、その館の構造(オブジェクトモデル)を頭に叩き込みましょう。
Visioの階層構造は、次のようなピラミッドになっています。
[Application] (Visioアプリ全体)
└─ [Documents] (開かれているファイル全体の集合)
└─ [Document] (個別のファイル:図面)
└─ [Pages] (ページ全体の集合)
└─ [Page] (個別のページ)
└─ [Shapes] (図形全体の集合)
└─ [Shape] (個別の図形)
すべての頂点に君臨するのが、`Application`オブジェクトです。
「今、Visioで何が起きているのか」「どのファイルが開かれているのか」のすべては、この `Application` から辿ることができます。
—
2. マクロの第一歩:Applicationと仲良くなる
まずは、VBAのコードエディタを開いて、一番基本のコードを見てみましょう。
Visioの画面で `[Alt] + [F11]` キーを押してVBE(Visual Basic Editor)を開き、標準モジュールに以下のコードを貼り付けてみてください。
Sub CheckVisioApp()
‘ Applicationオブジェクトを変数に格納する
Dim visApp As Visio.Application
Set visApp = Application ‘ 現在動いているVisio自身を指す
‘ Visioのバージョンと名前を表示する
MsgBox “現在稼働中のVisio:” & visApp.Name & vbCrLf & _
“バージョン:” & visApp.Version, vbInformation, “Visio基礎講座”
End Sub
💡 先輩エンジニアのワンポイント解説
ここで重要なのは、`Application`(または `Visio.Application`)という親分をしっかり変数に捉えている点です。
実は、Visio VBAでは単に `ActiveDocument` や `ActivePage` と書くこともできますが、複雑な自動化を行うようになると「今、どのアプリケーションの、どのドキュメントを操作しているのか」が曖昧になり、バグの温床になります。
「親(Application)から順に辿る」という意識を持つことが、プログラミング中級者への最短ルートです。
—
3. ドキュメントを「創る・開く・保存する」基本の実務コード
それでは、現場で即戦力となる「新規作成」「オープン」「保存」の3大基本操作をコードで見ていきましょう。
以下のコードをそのままコピペして実行してみてください。
Sub MasterBasicDocumentOps()
Dim visDoc As Visio.Document
Dim targetPath As String
‘ —————————————————-
‘ 1. 新規図面を作成する(白紙のドキュメント)
‘ —————————————————-
‘ 引数なしでAddメソッドを呼ぶと、デフォルトの空白図面が開きます
Set visDoc = Documents.Add(“”)
MsgBox “新しい図面を作成しました。次はファイルを保存します。”, vbInformation
‘ —————————————————-
‘ 2. ファイルを保存する (SaveAs)
‘ —————————————————-
‘ 保存先のパスを設定(ここではデスクトップを指定)
‘ ※環境に合わせてパスは適宜書き換えてください
targetPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\MyFirstVisio.vsdm”
‘ ドキュメントを名前をつけて保存
visDoc.SaveAs targetPath
MsgBox “デスクトップにファイルを保存しました:” & vbCrLf & targetPath, vbInformation
‘ —————————————————-
‘ 3. 一度閉じて、既存ファイルとして開く (Open)
‘ —————————————————-
‘ あえて一度ドキュメントを閉じます(保存済みなので引数なしでClose)
visDoc.Close
‘ 3秒待つ(視覚的な確認用)
Application.Wait Now + TimeValue(“0:00:01”)
‘ 保存したファイルを再び開く
Set visDoc = Documents.Open(targetPath)
MsgBox “保存したファイルを再度オープンしました!”, vbInformation
‘ 後片付け(開いたままにする場合は不要ですが、オブジェクト変数を開放する癖をつけましょう)
Set visDoc = Nothing
End Sub
—
4. 初学者が必ずハマる「3大トラップ」と回避策
Visio VBAを始めたばかりの頃、誰もが次の壁にぶつかります。先輩からのアドバイスとして先回りして伝授しておきますね。
トラップ①:`Documents.Add` でテンプレートエラーが出る
- 現象: `Documents.Add(“C:\…”)` と書いたのに、ファイルが見つからないと怒られる。
- 原因: Visioのステンシルやテンプレートの拡張子は `.vssx` や `.vstx` ですが、パスの指定ミスや、旧形式との混同が起きやすいです。
- 対策: まずは何も引数を渡さない `Documents.Add(“”)` で「完全な白紙」から作る癖をつけましょう。余計なエラーを回避できます。
トラップ②:上書き保存(`Save`)で怒られる
- 現象: まだ一度も保存していない新規図面に対して `visDoc.Save` を実行したらエラーになった。
- 原因: パスが決まっていないドキュメントに「上書き(Save)」はできません。
- 対策: 初回は必ず `SaveAs` でパスを指定して保存し、2回目以降の変更に対して `Save` を使うように分岐させましょう。
トラップ③:オブジェクトの解放忘れによるメモリリーク
- 現象: マクロを何回も実行しているうちに、Visioの動作が重くなったり、裏でプロセスが残り続ける。
- 対策: コードの最後で、 `Set visDoc = Nothing` のようにオブジェクト変数をクリアする美しいコーディングを心がけましょう。
—
まとめ
今回は、Visio VBAの根幹である `Application` オブジェクトの概念と、ドキュメントのライフサイクル(新規作成・保存・オープン)について解説しました。
- Visioの操作は `Application` から始まるピラミッド構造。
- 新規作成は `Documents.Add(“”)`。
- 保存は初回が `SaveAs`、2回目以降が `Save`。
- 既存ファイルを開くのは `Documents.Open()`。
ここさえ押さえておけば、図形を配置したり線を結んだりする高度な自動化の舞台はすべて整ったも同然です。
ぜひご自身の環境でコードを動かし、Visioを意のままに操る快感を味わってみてくださいね。次回のテーマもお楽しみに!
