さらに重要な調査を行った後、2 番目の質問に対する答えを発見しました。Access 2010 ランタイムで Access 2000 データベースを開くときに、潜在的なセキュリティ上の問題のダイアログが表示されないようにするにはどうすればよいですか?
基本的に、信頼できる場所のリストにデータベースを追加する必要があります。Access 2010 ランタイムはこの機能の UI を提供しないため、プログラムで実行する必要があります。この Web サイトはコードを提供しています: Utter Access Add Trusted Location
この状況での特定の要件に合わせて変更しました。Access 2010 ランタイムで Access 2000 データベースを実行します。レジストリ設定に応じて、ランタイムの他のバージョン用に変更する必要があります。また、これは Windows 8 では機能しないと読みました。しかし、このコードを実行するのに管理者権限は必要ないこともわかりました。これは、現在のユーザーがフル アクセスできるレジストリの HKEY_CURRENT_USER ハイブのみを変更するためです。
Public Function AddTrustedLocation()
On Error GoTo err_proc
'WARNING: THIS CODE MODIFIES THE REGISTRY
'You do not need administrator privileges
'since it only affects the HK_CURRENT_USER hive
'sets registry key for 'trusted location'
Dim intLocns As Integer
Dim i As Integer
Dim intNotUsed As Integer
Dim strLnKey As String
Dim reg As Object
Dim strPath As String
Dim strTitle As String
strTitle = "Add Trusted Location"
Set reg = CreateObject("wscript.shell")
strPath = CurrentProject.path
'Specify the registry trusted locations path for the Access 2010 runtime
strLnKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Access\Security\Trusted Locations\Location"
On Error GoTo err_proc0
'find top of range of trusted locations references in registry
For i = 999 To 0 Step -1
reg.RegRead strLnKey & i & "\Path"
GoTo chckRegPths 'Reg.RegRead successful, location exists > check for path in all locations 0 - i.
checknext:
Next
MsgBox "Unexpected Error - No Registry Locations found", vbExclamation
GoTo exit_proc
chckRegPths:
'Check if Currentdb path already a trusted location
'reg.RegRead fails before intlocns = i then the registry location is unused and
'will be used for new trusted location if path not already in registy
On Error GoTo err_proc1:
For intLocns = 1 To i
reg.RegRead strLnKey & intLocns & "\Path"
'If Path already in registry -> exit
If InStr(1, reg.RegRead(strLnKey & intLocns & "\Path"), strPath) = 1 Then GoTo exit_proc
NextLocn:
Next
If intLocns = 999 Then
MsgBox "Location count exceeded - unable to write trusted location to registry", vbInformation, strTitle
GoTo exit_proc
End If
'if no unused location found then set new location for path
If intNotUsed = 0 Then intNotUsed = i + 1
'Write Trusted Location regstry key to unused location in registry
On Error GoTo err_proc:
strLnKey = strLnKey & intNotUsed & "\"
reg.RegWrite strLnKey & "AllowSubfolders", 1, "REG_DWORD"
reg.RegWrite strLnKey & "Date", Now(), "REG_SZ"
reg.RegWrite strLnKey & "Description", Application.CurrentProject.Name, "REG_SZ"
reg.RegWrite strLnKey & "Path", strPath & "\", "REG_SZ"
exit_proc:
Set reg = Nothing
Exit Function
err_proc0:
Resume checknext
err_proc1:
If intNotUsed = 0 Then intNotUsed = intLocns
Resume NextLocn
err_proc:
MsgBox Err.Description, , strTitle
Resume exit_proc
End Function
この関数を AutoExec マクロに追加しました。ユーザーが最初にログオンしたときに、セキュリティ通知を受け取ります。ただし、ドキュメントが最初に実行された信頼できる場所に残っている限り、再び表示されることはありません。ウーフー!