XML File Toolbox fĂŒr MS Access – 13 Funktionen mit der Power von XML

INI-Dateien sind großartig fĂŒr einfache Einstellungen – aber sobald die Anwendung wĂ€chst, braucht es mehr: Hierarchien, UTF-8, Validierung. Zeit fĂŒr XML! Diese VBA-Toolbox bringt INI-Ă€hnliche Einfachheit mit der Power von XML: 13 Funktionen, Late Binding, 32/64-Bit.

Im INI-Helper haben wir uns INI-Dateien angeschaut – eine einfache, bewĂ€hrte Lösung fĂŒrs Konfigurationsmanagement. Jetzt geht es eine Stufe weiter: XML-Dateien. INI ist großartig fĂŒr einfache Einstellungen, stĂ¶ĂŸt aber schnell an Grenzen:

  • keine hierarchischen Strukturen (nur Sektion → Key → Wert)
  • keine Datenvalidierung
  • eingeschrĂ€nkte UnterstĂŒtzung fĂŒr internationale Zeichen
  • ungeeignet fĂŒr komplexe Datenstrukturen

XML: nicht nur fĂŒr Konfigurationen

XML ist viel vielseitiger als INI:

  • Hierarchische Datenstrukturen – perfekt fĂŒr verschachtelte Konfigurationen, Kataloge oder Produktdatenbanken.
  • UTF-8 – alle Sprachen, Sonderzeichen und sogar Emojis.
  • Datenaustausch – XML ist der Standard fĂŒr Systemintegration.
  • Validierung – Struktur und Inhalt prĂŒfen.
  • Eingebaut – MSXML ist in jeder Windows-Installation verfĂŒgbar.

Kurz: INI fĂŒr einfache FĂ€lle, XML wenn du Power und FlexibilitĂ€t brauchst. Alle Funktionen nutzen Late Binding (keine Referenzen nötig) und laufen in allen Access-Versionen (32/64-Bit).

Die 13 Funktionen der Toolbox

1. XML_ReadValue – Werte auslesen.

strBackendPath = XML_ReadValue(strXmlPath, "Database", "BackendPath", "")

2. XML_WriteValue – Werte schreiben/aktualisieren. Erstellt Datei und Sektion automatisch; Sonderzeichen werden automatisch escaped.

XML_WriteValue strXmlPath, "Database", "BackendPath", strSelectedPath

3. XML_PrintAll – komplette Datei ausgeben. Formatiert im Direktfenster – perfekt zum Debuggen.

XML_PrintAll CurrentProject.Path & "\config.xml"

4. XML_GetSections – alle Sektionen auflisten.

Set colSections = XML_GetSections(strXmlPath)
For Each varSection In colSections
    Debug.Print "Gefundene Sektion: " & varSection
Next

5. XML_GetKeys – alle Keys einer Sektion.

Set colKeys = XML_GetKeys(strXmlPath, "Database")
For Each varKey In colKeys
    Debug.Print varKey & " = " & XML_ReadValue(strXmlPath, "Database", CStr(varKey))
Next

6. XML_DeleteSection – ganze Sektion löschen.

If XML_SectionExists(strXmlPath, "OldModule") Then
    XML_DeleteSection strXmlPath, "OldModule"
End If

7. XML_DeleteKey – einzelnen Key löschen.

XML_DeleteKey strXmlPath, "Session", "TempPassword"

8. XML_SectionExists – Sektion prĂŒfen.

If Not XML_SectionExists(strXmlPath, "DatabaseV2") Then
    ' Sektion anlegen ...
End If

9. XML_KeyExists – Key prĂŒfen.

If Not XML_KeyExists(strXmlPath, "Features", "AutoBackup") Then
    XML_WriteValue strXmlPath, "Features", "AutoBackup", "True"
End If

10. XML_PrintStructured – strukturierte Ausgabe. Zeigt die XML hierarchisch – ideal fĂŒr die Dokumentation.

XML_PrintStructured strXmlPath

11. XML_GetAllValues – Dictionary aller Werte.

Set dictDB = XML_GetAllValues(strXmlPath, "Database")
Debug.Print "Server: " & dictDB("Server")
Debug.Print "Port: " & dictDB("Port")
Debug.Print "Timeout: " & dictDB("Timeout")

12. XML_ValidateFormat – Format validieren. PrĂŒft auf fehlerhaftes XML, doppelte Keys und fehlende Attribute.

If Not XML_ValidateFormat(strImportedXmlPath) Then
    MsgBox "Die importierte Konfiguration ist fehlerhaft!", vbCritical
End If

GeprĂŒft wird u. a.: Datei existiert und ist lesbar · XML ist wohlgeformt · keine doppelten Sektionen · keine doppelten Keys je Sektion · alle Sektionen und Keys haben Namen.

13. XML_Compare – zwei XML-Dateien vergleichen. Der Hammer fĂŒr Versionierung und Migrations-Management.

If Not XML_Compare(strOldConfig, strNewConfig) Then
    Debug.Print "Änderungen erkannt - Details im Direktfenster"
End If

Perfekt fĂŒr Versions-Vergleiche nach Updates, Fehlersuche, Änderungs-Dokumentation und Warnungen bei kritischen Abweichungen.

Real-World-Beispiele – ĂŒber Konfigurationen hinaus

Multi-Backend-UnterstĂŒtzung:

XML_WriteValue strXmlPath, "Backends", "Production", "\\Server\DB\Prod.accdb"
XML_WriteValue strXmlPath, "Backends", "Test", "\\Server\DB\Test.accdb"
XML_WriteValue strXmlPath, "Backends", "Development", "C:\Dev\DB.accdb"
XML_WriteValue strXmlPath, "Settings", "CurrentEnvironment", "Production"

Produktkatalog mit hierarchischer Struktur – XML ist perfekt fĂŒr verschachtelte Daten:

<?xml version="1.0" encoding="UTF-8"?>
<Product>
    <Section name="Electronics">
        <Key name="Laptop_001">Dell XPS 15, €1499, 16GB RAM</Key>
        <Key name="Laptop_002">MacBook Pro, €2299, 32GB RAM</Key>
        <Key name="Phone_001">iPhone 15, €999, 256GB</Key>
    </Section>
    <Section name="Books">
        <Key name="Programming_001">Clean Code, €35.99</Key>
        <Key name="Programming_002">Design Patterns, €42.50</Key>
    </Section>
</Product>

Export-Vorlagen fĂŒr Reports:

XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Titel", "Monatlicher Verkaufsbericht"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "DatumsFormat", "TT.MM.JJJJ"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Spalten", "Datum,Kunde,Betrag,Status"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Sortierung", "Betrag DESC"

User-spezifische Einstellungen mit UTF-8 – alle Sonderzeichen funktionieren einwandfrei:

XML_WriteValue strXmlPath, "UI", "Language", "DE"
XML_WriteValue strXmlPath, "UI", "Theme", "Dark"
XML_WriteValue strXmlPath, "UI", "BegrĂŒĂŸungsText", "Willkommen zurĂŒck, MĂŒller!"
XML_WriteValue strXmlPath, "Export", "StandardOrdner", "C:\Benutzer\Marcus\Exporte"

Systemintegration: Daten mit anderen Systemen austauschen, die XML erwarten (Webservices, ERP). Die Funktionen erstellen automatisch valides, wohlgeformtes XML.

Sonderzeichen? Automatisch behandelt

Das Modul escaped alle Sonderzeichen automatisch (&, <, >, ", ') – du musst dich um nichts kĂŒmmern.

XML_WriteValue strXmlPath, "Test", "Ampersand", "A & B"            ' bleibt "A & B"
XML_WriteValue strXmlPath, "Test", "Quotes", "Er sagte ""Hallo"""  ' automatisch escaped

Die Vorteile auf einen Blick

  • Update-sicher, UTF-8-fĂ€hig und hierarchisch fĂŒr komplexe, verschachtelte Strukturen.
  • Robust: MSXML, seit Jahrzehnten bewĂ€hrt; universal als Standard fĂŒrs Datenaustausch.
  • 32/64-Bit, ohne AbhĂ€ngigkeiten (nur MSXML, Late Binding) und mit Auto-Escaping.

Ausblick: In der nÀchsten Folge stelle ich Àhnliche Tools vor, die Daten im .yml-Format speichern, schreiben und auslesen.

Einfach ausprobieren

Über die mitgelieferte Testing-Form probierst du die Funktionen direkt aus. Die ausfĂŒhrliche Beschreibung findest du wie gewohnt gut dokumentiert direkt im Code.

Download

Eine VBA-Toolbox fĂŒr MS Access mit 13 Funktionen fĂŒr XML-Dateien: lesen, schreiben, Sektionen/Keys verwalten, validieren und vergleichen – hierarchisch, UTF-8-fĂ€hig, per MSXML und ohne Referenzen.