Wie kann ich automatisch den Trusted Location-Pfad einer Anwendung per VBA setzen oder prĂŒfen?

Wer mit Microsoft Access, Excel oder anderen Office-Anwendungen arbeitet, kennt das Problem: Beim Öffnen einer Datei auf einem neuen Rechner oder Laufwerk erscheint die Sicherheitswarnung – „Makros wurden deaktiviert“ oder „Unsicherer Speicherort“. Besonders bei Access-Frontends mit VBA oder Formular-Logik ist das ein echter Showstopper fĂŒr Anwender:innen.

Die Ursache: Die Datei liegt nicht in einem sogenannten Trusted Location – also einem von Office als sicher eingestuften Pfad. Diese Einstellung kann ĂŒber die BenutzeroberflĂ€che im Trust Center vorgenommen werden – oder automatisiert per VBA ĂŒber die Windows-Registry.

Warum das wichtig ist

Wenn Du eigene Access-Frontends verteilst, ist es nicht zumutbar, dass Deine Nutzer:innen manuell ĂŒber die Optionen in Access den Pfad als vertrauenswĂŒrdig deklarieren mĂŒssen. Automatisiert kannst Du das direkt beim ersten Start prĂŒfen – und wenn nötig, in der Registry ergĂ€nzen.

Wichtig: Trusted Locations gelten benutzerspezifisch. Sie werden pro Office-Version in der Registry unter HKEY_CURRENT_USER gespeichert – und mĂŒssen daher ggf. pro Benutzer eingerichtet werden.

Wo speichert Access seine Trusted Locations?

Die Registry-Pfade variieren je nach Office-Version und Anwendung. Beispiel fĂŒr Access 365 / 2016 / 2019:

HKEY_CURRENT_USER\Software\Microsoft\Office\<Version>\Access\Security\Trusted Locations

Beispiele:

  • Office 2016 = 16.0
  • Office 2013 = 15.0
  • Office 2010 = 14.0

Unter diesem SchlĂŒssel befinden sich dann Location0, Location1 usw., in denen Path und AllowSubfolders definiert sind.

Beispiel: Trusted Location automatisch setzen per VBA

Mit folgendem Code kannst Du prĂŒfen, ob der aktuelle Pfad bereits eingetragen ist – und ihn ggf. als Trusted Location ergĂ€nzen:

Public Sub SetzeTrustedLocation(Optional OrdnerPfad As String)
    Dim WshShell As Object
    Dim regPath As String
    Dim keyIndex As Integer
    Dim version As String
    Dim PfadVorhanden As Boolean
    Dim i As Integer
    Dim keyTest As String
    
    ' Aktuellen Ordner verwenden, wenn nichts ĂŒbergeben
    If OrdnerPfad = "" Then
        OrdnerPfad = CurrentProject.Path & "\"
    ElseIf Right(OrdnerPfad, 1) <> "\" Then
        OrdnerPfad = OrdnerPfad & "\"
    End If

    ' Office-Version ermitteln (Access.Application.Version liefert z. B. "16.0")
    version = Application.Version
    regPath = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & version & "\Access\Security\Trusted Locations\"

    Set WshShell = CreateObject("WScript.Shell")
    
    ' PrĂŒfen, ob Pfad schon eingetragen ist
    PfadVorhanden = False
    For i = 0 To 99
        On Error Resume Next
        keyTest = WshShell.RegRead(regPath & "Location" & i & "\Path")
        On Error GoTo 0
        If keyTest = "" Then Exit For
        If StrComp(keyTest, OrdnerPfad, vbTextCompare) = 0 Then
            PfadVorhanden = True
            Exit For
        End If
    Next i

    If PfadVorhanden Then
        MsgBox "Der Pfad ist bereits als vertrauenswĂŒrdig eingetragen:" & vbCrLf & OrdnerPfad, vbInformation
    Else
        ' Neuen Key anlegen
        keyIndex = i
        With WshShell
            .RegWrite regPath & "Location" & keyIndex & "\Path", OrdnerPfad, "REG_SZ"
            .RegWrite regPath & "Location" & keyIndex & "\AllowSubfolders", 1, "REG_DWORD"
            .RegWrite regPath & "Location" & keyIndex & "\Description", "Automatisch gesetzt", "REG_SZ"
        End With
        MsgBox "Neuer vertrauenswĂŒrdiger Speicherort hinzugefĂŒgt:" & vbCrLf & OrdnerPfad, vbInformation
    End If
End Sub

Anwendung

Du kannst diesen Code beim Start Deiner Anwendung aufrufen – z. B. im Autoexec-Makro oder beim Öffnen des Startformulars:

Call SetzeTrustedLocation

Oder gezielt fĂŒr ein bestimmtes Verzeichnis:

Call SetzeTrustedLocation("C:\Daten\AccessFrontend")

EinschrÀnkungen und Hinweise

  • Der Code funktioniert nur, wenn der Benutzer Schreibrechte auf die Registry hat.
  • Änderungen werden sofort wirksam, allerdings muss Access eventuell neu gestartet werden, um die Vertrauensstellung anzuerkennen.
  • Bei Terminalserver-Umgebungen oder Roaming-Profilen sollte die Lösung mit der IT abgestimmt werden.

Fazit

Mit wenigen Zeilen VBA-Code kannst Du sicherstellen, dass Dein Access-Frontend beim ersten Start ohne Sicherheitswarnung geöffnet wird – ganz ohne manuelle Eingriffe der Benutzer:innen. Das verbessert nicht nur die User Experience, sondern reduziert auch Support-Anfragen erheblich.

Wenn Du Access-Anwendungen verteilst, lohnt sich dieser Schritt in jedem Setup-Prozess.

Du brauchst Hilfe bei der Automatisierung, Installation oder bei grĂ¶ĂŸeren Access-Deployments mit SQL Server, mehreren ArbeitsplĂ€tzen oder Versionierung? Dann sprich mich an – ich unterstĂŒtze Dich gern.

🐑 DatenschĂ€fer – Auswertung, Analyse und Automatisierung fĂŒr KMU im Norden
📧 Kontakt ĂŒber sesoft.de | 🧠 Access · VBA · SQL · Power Platform

Kategorien:

Schlagwörter:

Keine Antworten

Schreibe einen Kommentar

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