[VBS] Accessランタイムのセキュリティの警告を非表示にする方法

Accessランタイムのaccdbファイルを起動した際に、セキュリティの警告が表示され、「コンテンツの有効化」ボタンを押さないと起動できないときがあります。

通常のAccessなら一度押せば、押したことが記憶される(レジストリに登録される)のですが、ランタイムの場合は登録されないため起動するたびに「セキュリティの警告」が表示されます。

毎回「コンテンツの有効化」ボタンを押せばいいのですが、面倒です。
そこで、VBSでレジストリを登録してしまえば、「セキュリティの警告」が表示されなくなります。

具体的には、accdbが置いてあるフォルダを「信頼できる場所」に登録することで、セキュリティの警告が出ないようにします。

以下のコードでできます。

注意
・レジストリを書き換える操作なので、パスの設定等に気を付けて実行してください
・3行目:Const TrustedLocationsに設定している「16.0」はAccessのバージョンによって異なります。実際にレジストリを確認して設定してください。
(Access2010の場合は14.0等)
レジストリの確認方法がわからない場合は、以下のページを参照してください。

以下、セキュリティの警告を非表示にするVBSです。

Const HKEY_CURRENT_USER = &H80000001
Const S_HKEY_CURRENT_USER = "HKEY_CURRENT_USER\"
Const TrustedLocations = "Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\"

' 「信頼できる場所」に追加したいフォルダの設定
Const NewRegPath = "C:\Users\Public\Documents"  ' パス
Const NewRegDescription = "sampleDescription"   ' 説明文
Const NewRegAllowSubFolders = 1                 ' サブフォルダも追加する場合

Dim Locator, Service, Reg
Dim Shell
Dim SubKeySet, SubKey
Dim intLocation, intLocationMax
Dim strLocationNew
Dim strPathTmp

Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer(vbNullString, "root\default")
Set Reg = Service.Get("StdRegProv")
Set Shell = createobject("WScript.Shell")

' サブキーを全て取得する
Reg.EnumKey HKEY_CURRENT_USER, TrustedLocations, SubKeySet

' "LocationX" の"X"の最大値を取得する
intLocationMax = 0
for each SubKey in SubKeySet

    ' "LocationX" -> "X" に変換(数字のみにする)
    intLocation = CInt(replace(SubKey, "Location", ""))

    ' 最大値を更新
    if intLocationMax < intLocation then 
        intLocationMax = intLocation
    end if

    ' 登録済みかチェック(登録済みなら終了)
    strPathTmp = Shell.RegRead(S_HKEY_CURRENT_USER & TrustedLocations & _
                            "Location" & intLocation & "\Path")
    if strPathTmp = NewRegPath then
        ' Pathが登録済みのため、終了
        WScript.Quit(0)
    end if

next

' 信頼できる場所を新たに追加する(LocationX+1)
strLocationNew = S_HKEY_CURRENT_USER & TrustedLocations & _
                 "Location" & (intLocationMax + 1) 

' 「信頼できる場所」に追加したいパス
Shell.RegWrite strLocationNew & "\Path", NewRegPath, "REG_SZ"
' 説明文(わかりやすいように)
Shell.RegWrite strLocationNew & "\Description", NewRegDescription, "REG_SZ"
' サブフォルダも「信頼できる場所」に追加したい場合、以下も設定する(任意)
Shell.RegWrite strLocationNew & "\AllowSubFolders" , NewRegAllowSubFolders, "REG_DWORD"

コードに使っている関数がわからない場合は、以下のページを参照してください。

実行前のレジストリは以下の通りです。

Trusted Locationsが「信頼できる場所」です。
Location2 はAccessを起動すると自動的に作成されるものです。

VBS実行後は以下のようになります。

Location3 が新たに作成され、Pathに設定したパス(C:\Users\Public\Documents)が登録されています。
(最初に示したaccdbファイルはこのフォルダに置いてあります。)

これで、登録したパスにあるaccdbファイルは、セキュリティの警告が表示されなくなります。

以下、コードの補足です。

Accessの「信頼できる場所」の設定は
“HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\”
にあります。
Accessを一度起動すると、自動的に「Location2」が作成されます。
(上記のコードは、一度Accessを起動していないとうまく動作しません)
なぜLocation2から作成されるかは分かりませんが、Location0を作ってもしっかり認識されますし、Location3でも認識されます。
なので、今回は、すでにあるLocationXの、Xの最大値+1を作成するようにしました。

登録するPathを変更して実行するたび、Location3, Location4, Location5 と数字が増えていく仕様です。
(同じPathでは1つしか登録できないようにしています。)

また、今回は新規登録のVBSを作成しました。登録内容の変更には対応していません。
(LocationXのXの操作をうまくすれば、変更にも対応できます)

実際に使うときは、終了メッセージとか入れて使ってください。