Visioを「自分の道具」に変える。ステンシルを自動で隠し、作業領域を最大化するVBA術
こんにちは。日々の自動化業務、お疲れ様です。
Visioを開くたび、左側に陣取る巨大なステンシルウィンドウをマウスで「×」ボタンを押して消す……そんなルーチンワークに時間を溶かしていませんか?
Visioは非常に強力なツールですが、デフォルトのUIは「描画」よりも「選ぶ」ことに最適化されています。しかし、プロの現場では、「描画領域をいかに広く確保するか」が生産性の直結ポイントです。
今回は、VBAを使って「図面を開いた瞬間にステンシルを消し、作業領域を最大化する」という、エンジニアの第一歩を踏み出しましょう。
—
1. なぜ「マクロの記録」だけでは限界があるのか
多くの初心者が最初にぶつかる壁が「マクロの記録」です。しかし、Visioの記録機能は万能ではありません。今回のように「ウィンドウの制御」といったUI操作は、記録されないことが多々あります。
ここで必要になるのが、Visioのオブジェクトモデルを直接叩く「VBAプログラミング」という作法です。
本質:Visioの構造を理解する
Visioにおいて、ステンシルウィンドウは `Application` オブジェクト配下の `ActiveWindow` に紐づいています。これらをプログラムから操ることで、手動操作を一切排除した「自分専用の作業環境」を構築できるのです。
—
2. 実装コード:ステンシルを即座に葬る
以下のコードを、VisioのVBAエディタ(Alt + F11)の標準モジュールに貼り付けてください。
Option Explicit
‘ 作業領域を最大化するためのメインプロシージャ
Public Sub OptimizeWorkspace()
Dim win As Visio.Window
‘ エラーハンドリング:ウィンドウが存在しない場合の予期せぬ停止を防ぐ
On Error Resume Next
‘ 現在アクティブなウィンドウを取得
Set win = Application.ActiveWindow
‘ 1. ステンシルウィンドウ(Visioでは’WindowType’がvisDockedまたはvisStencilにあたる)
‘ 実務レベルでは、アクティブなウィンドウの中に含まれるウィンドウを走査して閉じます
Dim subWin As Visio.Window
For Each subWin In win.Windows
‘ ウィンドウの種類が「ステンシル」である場合のみ閉じる
If subWin.Type = Visio.VisWinTypes.visDocked Then
‘ ここでステンシルウィンドウを不可視化(閉じます)
subWin.Visible = False
End If
Next subWin
‘ 2. 視覚的ノイズを減らす(定規やグリッドの制御もここで行える)
win.ShowRulers = False
win.ShowGrid = False
On Error GoTo 0
MsgBox “作業領域の最適化が完了しました!”, vbInformation
End Sub
コードの解説
- `On Error Resume Next`: プログラミングの現場では必須です。ステンシルが最初から開いていない場合、コードがエラーで止まるのを防ぐ「安全装置」です。
- `For Each subWin In win.Windows`: ここが肝です。Visioの画面は「複数のウィンドウの集合体」です。一つひとつをループで巡回し、ステンシルという「タイプ」を見つけて消し去るというロジックです。
- `Visible = False`: 削除するのではなく、「見えなくする」ことが重要です。メモリを解放しつつ、必要な時は再表示できるようにするため、この手法が最もスマートです。
—
3. 陥りやすい罠と解決策
初心者がよくやる失敗を、先回りして解説します。
- 罠1:他のウィンドウまで消してしまう
- `If subWin.Type = …` で判定を絞らないと、必要なメニューまで消えてしまいます。必ず `Type` プロパティで識別しましょう。
- 罠2:実行タイミングを逃す
- 毎回ボタンを押すのは面倒です。これを発展させると、「Visioを起動したとき」や「ファイルを開いたとき」に自動実行させるイベント駆動というテクニックに繋がります(`Document_DocumentOpened` イベントを使用します)。
—
4. プロへの道:ここをクリアすれば「自動化エンジニア」の仲間入り
今回学んだのは「ウィンドウの制御」という、Visio VBAの基礎中の基礎です。しかし、この「オブジェクトを特定し、プロパティを操作する」という一連の流れは、図形(Shape)の自動配置や、外部Excelデータとの連携においても全く同じ考え方です。
次へのステップ:
1. このコードを `ThisDocument` モジュールに入れ、`Document_DocumentOpened` イベントに関連付けてみてください。
2. ファイルを開くだけで、貴方の好みの作業環境が整うようになります。
Visioはただのお絵かきソフトではありません。あなたの思考を高速で形にする「思考の拡張デバイス」です。VBAを使いこなして、その拡張性能を最大限に引き出してくださいね。
ここをクリアしたあなたは、もう「マクロの記録」に頼る初心者ではありません。ぜひ、現場の不満をコードで解決する喜びを味わってください。
応援しています!
