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:

  1. Datei → Optionen → Trust Center
  2. Trust Center-Einstellungen → Vertrauenswürdige Speicherorte
  3. Speicherort hinzufügen
  4. Häkchen bei „Unterordner einbeziehen“ setzen
  5. 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-EintragWert
Pfadz. B. \\server\apps\access\
AllowSubfolders1
Office-VersionPfad 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.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert