Visioを「ただの図面」から「現場の管制塔」へ変える:UI完全制御によるキオスクモードの実装術
現場のモニターにVisioを表示させたいとき、デフォルトのUI(リボン、ステータスバー、スクロールバー)はノイズでしかない。我々エンジニアが目指すべきは、「操作させない、迷わせない、情報の純度を最大化する」環境の構築だ。
今日は、VisioのUIをVBAで完全に掌握し、タッチパネル対応のキオスクモードへ昇華させるための「プロの作法」を伝授する。
—
1. 勘違いされがちな「隠蔽」の罠
多くの初心者は`Application.ShowToolbar`や`CommandBars`を場当たり的にいじり、制御を失う。VisioのUI制御には、以下の3つの鉄則がある。
1. 状態のキャッシュと復元: 変更前の状態を必ずメモリに保持し、エラー時や終了時に必ず原状復帰させること。さもなくば、ユーザーのVisio環境を破壊することになる。
2. イベント駆動の徹底: ドキュメントが開かれた瞬間にUIを制御し、閉じるときに解除する。`Document_DocumentOpened`と`Document_BeforeDocumentClose`の活用は必須だ。
3. UIの階層を理解する: `CommandBars`(リボン以前のレガシーUI)と「リボン(Fluent UI)」は別物だ。現代のVisioでは、`Application.ShowToolbar`だけでなく、`Application.ExecuteMso`を用いたリボン制御も考慮せよ。
—
2. プロダクションコード:KioskManagerモジュール
このコードは、堅牢性を重視した設計だ。モジュールレベル変数で状態を管理し、異常系でも安全に終了できるようにしている。
‘ KioskManager: Visioを全画面ダッシュボード化するための制御クラス
Option Explicit
‘ UI状態の退避用
Private m_PrevStatusBar As Boolean
Private m_PrevScrollBars As Boolean
Private m_PrevFullScreen As Boolean
Public Sub EnableKioskMode()
On Error Resume Next ‘ UI制御は環境により失敗する可能性があるためガード
With Application
‘ 1. 現在の状態を保存
m_PrevStatusBar = .ShowStatusBar
m_PrevScrollBars = .ShowScrollBars
m_PrevFullScreen = .ShowFullScreen
‘ 2. UIを非表示化
.ShowStatusBar = False
.ShowScrollBars = False
‘ 3. 全画面モードへ移行
‘ ※重要: 全画面モードにするとリボン等のUIは自動的に隠れます
.ShowFullScreen = True
End With
On Error GoTo 0
End Sub
Public Sub DisableKioskMode()
On Error Resume Next
With Application
‘ 保存していた状態へ復元
.ShowStatusBar = m_PrevStatusBar
.ShowScrollBars = m_PrevScrollBars
.ShowFullScreen = m_PrevFullScreen
End With
On Error GoTo 0
End Sub
—
3. 実装のトリガー:ThisDocumentモジュール
UI制御を忘れずに実行するため、必ず`ThisDocument`イベントにフックさせること。
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
‘ ファイルが開かれた瞬間にキオスクモードへ
Call KioskManager.EnableKioskMode
End Sub
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
‘ 閉じる前に必ずUIを戻す(これがないと他のファイルを開いた時にユーザーが混乱する)
Call KioskManager.DisableKioskMode
End Sub
—
4. 現場で生き残るための「深層知見」
UI制御の「重み」を理解せよ
VisioのUIを操作するたびに、Visioは内部の再描画を試みる。もし`Document_DocumentOpened`内で、同時に大量のShapeデータの更新やDB接続を行っているなら、UI制御は「一番最後」に行うこと。処理中にUIがチカチカと点滅するのは、エンジニアとしての品位に関わる。
データベース連携のボトルネック
キオスクモードでダッシュボードを作る際、外部データベースやExcelからのデータ更新が頻発するだろう。
- 非同期的な更新を意識する: `Application.AlertsSuppressed = True` を活用し、データ更新時の警告ダイアログを徹底的に抑制せよ。これが漏れると、現場のモニターが「確認待ち」の状態でフリーズする。
- Timer関数の罠: `DoEvents`を多用したポーリング実装は避けること。CPUリソースを食いつぶす。一定間隔の更新なら、`Application.OnTime`メソッドを使用するのが、Windowsのメッセージループを阻害しない最もクリーンな手法だ。
最後に
キオスクモードは「閉鎖された環境」を作る行為だ。ユーザーが強制終了したくなった際、Alt+F4やCtrl+Alt+Deleteすら効かない環境を作るのはリスクが高い。必ず「終了」ボタンや「管理画面への遷移」ボタンをページ内に配置し、「戻る手段」を確保してから実装を完結させること。
現場が求めるのは、美しい図面ではなく、「止まらずに最新の情報を映し出し続けるシステム」だ。Visioをただの作図ツールとして使うのはもう終わりにしよう。君たちの手で、Visioを最強のビジネスインテリジェンス・ツールに変えるのだ。
