YAML File Toolbox für MS Access – lesbar UND mächtig

INI ist einfach, XML ist mächtig – YAML kombiniert das Beste aus beiden Welten: klare, menschenlesbare Syntax mit hierarchischen Strukturen, Arrays und UTF-8. Diese VBA-Toolbox bringt YAML nach MS Access: 13 Funktionen, reines VBA, 32/64-Bit.

In Teil 1 haben wir uns INI-Dateien angeschaut, in Teil 2 XML. Jetzt kommt die nächste Evolution: YAML. INI ist großartig für einfache Einstellungen, XML ist leistungsstark – aber YAML kombiniert das Beste aus beiden Welten:

  • Einfach und lesbar – klare Syntax ohne übermäßige Tags oder Klammern.
  • Hierarchisch – wie XML, aber viel eleganter.
  • UTF-8 – alle Sprachen, Sonderzeichen und Emojis.
  • Industriestandard – Docker, Kubernetes, Ansible, GitHub Actions.
  • Kompakt – weniger Overhead als XML.

INI vs. XML vs. YAML – der große Vergleich

Merkmal INI XML YAML
Lesbarkeit ⭐⭐⭐⭐⭐ exzellent ⭐⭐⭐ gut ⭐⭐⭐⭐⭐ exzellent
Dateigröße ⭐⭐⭐⭐⭐ sehr klein ⭐⭐ groß ⭐⭐⭐⭐ klein
Lernkurve ⭐⭐⭐⭐⭐ sehr einfach ⭐⭐⭐ mittel ⭐⭐⭐⭐ einfach
Hierarchie ❌ nur 2 Ebenen ✅ unbegrenzt ✅ unbegrenzt
UTF-8 ⚠️ eingeschränkt ✅ vollständig ✅ vollständig
Kommentare ; <!-- --> #
Datentypen ❌ nur Strings ⚠️ mit Schema ✅ eingebaut
Arrays/Listen ❌ nein ⚠️ verbose ✅ nativ
Validierung ❌ nein ✅ Schema (XSD) ✅ Schema (JSON)
Verbreitung ⭐⭐⭐ Legacy ⭐⭐⭐⭐ hoch ⭐⭐⭐⭐⭐ sehr hoch
Windows nativ ✅ Built-in API ✅ MSXML ❌ kein native
Geschwindigkeit ⭐⭐⭐⭐⭐ sehr schnell ⭐⭐⭐ mittel ⭐⭐⭐⭐ schnell
Am besten für einfache Configs komplexer Austausch moderne Configs

Wann was verwenden?

  • INI – ultra-einfache Konfiguration (nur Key-Value), maximale Performance, keine Hierarchie.
  • XML – komplexe verschachtelte Strukturen (> 2 Ebenen), Datenaustausch mit externen Systemen, Schema-Validierung, XSLT.
  • YAML – menschenlesbare Konfiguration mit Hierarchie, moderne Toolchains, Arrays und Datentypen, kleine Dateien, einfache Versionskontrolle.

Die 13 Funktionen der Toolbox

Alle Funktionen nutzen Late Binding (keine Referenzen nötig) und laufen in allen Access-Versionen (32/64-Bit).

1. YML_ReadValue – Werte auslesen.

strBackendPath = YML_ReadValue(strYmlPath, "Database", "BackendPath", "")

2. YML_WriteValue – Werte schreiben/aktualisieren. Erstellt Datei und Sektion automatisch; Sonderzeichen werden automatisch maskiert.

YML_WriteValue strYmlPath, "Database", "BackendPath", strSelectedPath

3. YML_PrintAll – komplette Datei ausgeben.

YML_PrintAll CurrentProject.Path & "\config.yml"

4. YML_GetSections – alle Sektionen auflisten.

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

5. YML_GetKeys – alle Keys einer Sektion.

Set colKeys = YML_GetKeys(strYmlPath, "Database")
For Each varKey In colKeys
    Debug.Print varKey & " = " & YML_ReadValue(strYmlPath, "Database", CStr(varKey))
Next

6. YML_DeleteSection – ganze Sektion löschen.

If YML_SectionExists(strYmlPath, "OldModule") Then
    YML_DeleteSection strYmlPath, "OldModule"
End If

7. YML_DeleteKey – einzelnen Key löschen.

YML_DeleteKey strYmlPath, "Session", "TempPassword"

8. YML_SectionExists – Sektion prüfen.

If Not YML_SectionExists(strYmlPath, "DatabaseV2") Then
    ' Sektion anlegen ...
End If

9. YML_KeyExists – Key prüfen.

If Not YML_KeyExists(strYmlPath, "Features", "AutoBackup") Then
    YML_WriteValue strYmlPath, "Features", "AutoBackup", "True"
End If

10. YML_PrintStructured – strukturierte Ausgabe.

YML_PrintStructured strYmlPath

11. YML_GetAllValues – Dictionary aller Werte.

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

12. YML_ValidateFormat – Format validieren.

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

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

13. YML_Compare – zwei YAML-Dateien vergleichen.

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

Real-World-Beispiele

Multi-Backend-Unterstützung:

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

Ergebnis in YAML:

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

Einstellungen mit Arrays – YAML eignet sich perfekt für Listen (Farbschemata, Serverlisten, Feature-Flags):

YML_WriteValue strYmlPath, "UI", "AvailableThemes", "[Light, Dark, HighContrast]"
YML_WriteValue strYmlPath, "UI", "CurrentTheme", "Dark"
YML_WriteValue strYmlPath, "UI", "PrimaryColors", "[#FF0000, #00FF00, #0000FF]"

Ergebnis in YAML:

UI:
  AvailableThemes: "[Light, Dark, HighContrast]"
  CurrentTheme: Dark
  PrimaryColors: "[#FF0000, #00FF00, #0000FF]"

User-spezifische Einstellungen mit UTF-8:

YML_WriteValue strYmlPath, "UI", "Language", "DE"
YML_WriteValue strYmlPath, "UI", "Theme", "Dark"
YML_WriteValue strYmlPath, "UI", "WelcomeMessage", "Willkommen zurück, Müller!"
YML_WriteValue strYmlPath, "Export", "DefaultFolder", "C:\Users\Marcus\Exports"

Ergebnis in YAML:

UI:
  Language: DE
  Theme: Dark
  WelcomeMessage: "Willkommen zurück, Müller!"
Export:
  DefaultFolder: "C:\\Users\\Marcus\\Exports"

Die Vorteile auf einen Blick

  • Update-sicher, UTF-8-fähig und lesbar (saubere Syntax ohne XML-Tags).
  • Industriestandard (Docker, Kubernetes, CI/CD) und kompakt (kleiner als XML).
  • 32/64-Bit, ohne Abhängigkeiten (reines VBA, Late Binding), mit Auto-Escaping, Kommentaren (#) und Inline-Arrays wie [1, 2, 3].

Damit ist die Trilogie über Konfigurationsdateiformate abgeschlossen – INI, XML und YAML. Je nach Anwendungsfall hast du jetzt das passende Werkzeug.

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 YAML-Dateien: lesbar und hierarchisch, mit Arrays und UTF-8 – lesen, schreiben, validieren und vergleichen, ganz ohne Referenzen.