【入門編】【中級者向け】図面を開く際に「マクロの有効化」を求められないよう、信頼できる場所をVBAで制御する – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの「セキュリティ警告」という名の壁を突破せよ:信頼できる場所の自動設定術

こんにちは。現場で泥臭く自動化を突き詰めているエンジニアの皆さん、お疲れ様です。

Visio VBAでいざ業務自動化ツールを作り上げ、「さあ、バッチ処理で一気に図面を処理するぞ!」と意気込んだ矢先、画面に立ちはだかるあの憎き「セキュリティ警告」。手作業でクリックしてマクロを有効にする……そんな非効率なことは、我々エンジニアの美学に反しますよね。

今回は、Visioの「信頼できる場所(Trusted Locations)」をVBA(およびレジストリ操作)から操り、「警告なしでマクロを自動実行する」ための、現場の知恵を伝授します。

—

なぜ「信頼できる場所」が必要なのか?

Visioは非常に堅牢なセキュリティ構造を持っています。マクロ入りのファイルを「信頼できない場所」から開こうとすると、必ず警告が出ます。これはExcelやWordでも同様ですが、Visioでバッチ処理を組む際、この警告は「処理を止める致命的なバグ」になります。

「信頼できる場所」とは、Microsoftに対して「このフォルダ内のファイルは安全だから、警告なしで実行してくれ」と宣言するVIP専用エリアのことです。

—

核心:レジストリを操作して「信頼」を勝ち取る

Visioの信頼できる場所の設定は、実はアプリケーションの設定ファイルではなく、Windowsのレジストリに書き込まれています。VBAからレジストリを操作することで、自動的に特定のフォルダを「安全な場所」として登録可能です。

実行前の注意点

  • 権限: レジストリ操作には管理者権限が必要です。
  • パスの管理: 誤ったパスを書き込むとVisioが不安定になる可能性があるため、慎重に扱ってください。

以下に、特定のフォルダを信頼できる場所に登録するVBAモジュールを提示します。

‘ 信頼できる場所をレジストリに登録するプロシージャ
Public Sub RegisterTrustedLocation(folderPath As String)
Dim wshShell As Object
Dim regKey As String
Dim version As String

‘ Visioのバージョン(例: 16.0はVisio 2016/2019/365)
version = “16.0”

‘ レジストリパスの構成
‘ HKCU = HKEY_CURRENT_USER
regKey = “HKEY_CURRENT_USER\Software\Microsoft\Office\” & version & “\Visio\Security\Trusted Locations\Location1\”

Set wshShell = CreateObject(“WScript.Shell”)

‘ パスの登録
wshShell.RegWrite regKey & “Path”, folderPath, “REG_SZ”
‘ サブフォルダも含める(1:含める, 0:含めない)
wshShell.RegWrite regKey & “AllowSubFolders”, 1, “REG_DWORD”
‘ 説明(任意)
wshShell.RegWrite regKey & “Description”, “Automated Task Folder”, “REG_SZ”

MsgBox “信頼できる場所を登録しました:” & vbCrLf & folderPath, vbInformation
End Sub

—

コードの解説:ここがエンジニアの腕の見せ所

このコードのポイントは3つです。

1. WScript.Shellの活用: VBAからWindows OSの機能(レジストリ)にアクセスするための標準的な手法です。`CreateObject`でインスタンスを生成し、`RegWrite`メソッドで書き込みます。
2. Location1の罠: `Location1`, `Location2`…と連番でキーを作成する必要があります。もし既に他の場所が登録されている場合、上書きしないように連番をチェックするロジックを組むのが「プロ」の仕事です。
3. バージョン管理: `version = “16.0”`の部分は、お使いのVisioに合わせて変更してください。15.0は2013、14.0は2010です。

—

陥りやすいエラーと回避策

1. 「書き込み権限がありません」エラー

VBAを実行するExcelやVisio自体を「管理者として実行」していないと、レジストリへの書き込みは拒否されます。開発環境のデバッグ時は注意してください。

2. 反映されない!

レジストリを書き換えても、既に開いているVisioインスタンスには即座に反映されません。一度Visioを完全に終了してから再起動する必要があります。

3. パスの文字列問題

ネットワークドライブ(\\Server\Share…)を指定する場合、パスの末尾に「\」が含まれているかなどで挙動が変わることがあります。常にフルパスで指定し、余分なスペースが入らないよう `Trim` 関数を通すのが安全策です。

—

まとめ:自動化の先にある世界

「信頼できる場所」をプログラムで制御できるようになったということは、あなたのVBAツールは「ユーザーの介入を一切必要としない完全自律型」に一歩近づいたことを意味します。

バッチ処理の開始時にこのレジストリ設定をチェックし、もし未登録なら登録を促す、あるいは自動的に登録する……そんな親切な設計ができるようになれば、あなたはもう初心者ではありません。

Visio VBAは奥が深く、時に気難しい相棒ですが、その分だけ制御できた時の快感は格別です。次は、この信頼された場所にある図面をVBAで一気にPDF変換する、といった実践的なステップへ進んでみましょう。

それでは、良い自動化ライフを!何かわからないことがあれば、またいつでも聞きに来てくださいね。

タイトルとURLをコピーしました