Warum Trusted Locations überhaupt wichtig sind
Access blockiert alles, was nicht aus einem „vertrauenswürdigen“ Pfad kommt.
Kein VBA, keine Makros, keine Formulare.
Für Endnutzer ein rotes Banner. Für Dich als Entwickler: Support-Tickets.
Trusted Locations sind Pflicht.
Gerade bei Frontend-Verteilung per Netzlaufwerk oder bei lokal installierten MDB/ACCDB-Dateien.
Der alte Weg: Manuell über die Access-Optionen
Klickorgie pur:
- Datei → Optionen → Trust Center
- Trust Center-Einstellungen → Vertrauenswürdige Speicherorte
- Speicherort hinzufügen
- Häkchen bei „Unterordner einbeziehen“ setzen
- Ok, Ok, Schließen
Nicht skalierbar. Nicht zentral steuerbar.
Und beim nächsten Benutzer: alles von vorn.
Der bessere Weg: Per Registry setzen
Ich setze Trusted Locations immer direkt in der Registry.
Das geht schnell, lässt sich verteilen – per Loginscript, GPO oder Setup-Routine.
Beispiel: Registry-Eintrag per .reg-Datei
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\Location99]
"Path"="C:\\AccessProjekte\\Frontend"
"AllowSubfolders"=dword:00000001
"Description"="Access Frontends"
Achtung:
Je nach Office-Version ist der Pfad unterschiedlich (16.0
= Office 2016/2019/365).
Per VBA prüfen und setzen – geht auch
Ich lasse Access beim Start prüfen, ob der aktuelle Pfad schon vertrauenswürdig ist.
Wenn nicht: Vorschlag anzeigen. Oder Eintrag per WScript setzen.
VBA: Prüfen, ob der Pfad bereits Trusted Location ist
Function IstTrustedLocation(pfad As String) As Boolean
Dim regKey As String
Dim i As Long
Dim shell As Object
Set shell = CreateObject("WScript.Shell")
For i = 1 To 100
On Error Resume Next
regKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\Location" & i
If shell.RegRead(regKey & "\Path") = pfad Then
IstTrustedLocation = True
Exit Function
End If
Next
IstTrustedLocation = False
End Function
VBA: Trusted Location automatisch setzen (per Script)
Sub SetzeTrustedLocation(pfad As String)
Dim shell As Object
Set shell = CreateObject("WScript.Shell")
Dim keyBase As String
Dim key As String
Dim i As Integer
keyBase = "HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\"
For i = 1 To 100
key = keyBase & "Location" & i & "\"
On Error Resume Next
If shell.RegRead(key & "Path") = "" Then
shell.RegWrite key & "Path", pfad, "REG_SZ"
shell.RegWrite key & "AllowSubfolders", 1, "REG_DWORD"
shell.RegWrite key & "Description", "Automatisch gesetzt", "REG_SZ"
Exit For
End If
Next
End Sub
Hinweis: Braucht Schreibrechte in der Registry.
Läuft also nur bei normalem User-Profil, nicht bei stark eingeschränkten Konten.
Integration in Startlogik
Ich baue die Prüfung direkt ins Startformular oder AutoExec ein:
Private Sub Form_Load()
Dim pfad As String
pfad = CurrentProject.Path & "\"
If Not IstTrustedLocation(pfad) Then
If MsgBox("Der Pfad ist nicht als vertrauenswürdig eingetragen." & vbCrLf & _
"Jetzt automatisch hinzufügen?", vbYesNo + vbQuestion) = vbYes Then
Call SetzeTrustedLocation(pfad)
MsgBox "Pfad wurde als vertrauenswürdig eingetragen." & vbCrLf & "Bitte Access neu starten.", vbInformation
Application.Quit
Else
MsgBox "Das Frontend kann ohne Vertrauensstatus eingeschränkt funktionieren.", vbExclamation
End If
End If
End Sub
Trusted Locations per Gruppenrichtlinie
Wenn Du zentral arbeitest:
Verteile die Pfade als GPO (ADM oder GPP Registry).
GPO-Eintrag | Wert |
---|---|
Pfad | z. B. \\server\apps\access\ |
AllowSubfolders | 1 |
Office-Version | Pfad je nach Version: 14.0 , 15.0 , 16.0 , usw. |
Damit sind alle Clients auf dem gleichen Stand.
Und Du bekommst keine Rückfragen mehr vom Support.
Mein Fazit
Trusted Locations manuell setzen ist wie Heizung mit Streichholz starten.
Ich automatisiere das. Immer. Spart Zeit und Nerven.
Einmal sauber gelöst, läuft Access auch ohne rote Warnleisten.
No responses yet