Beitrag aus SmartTools Access Weekly
Formulare, Berichte, Makros und Module einer Datenbank auslesen
Access 365 2021 2019 2016 2013 2010
FRAGE Um alle Tabellen und Abfragen in einer Datenbank in einer Schleife zu bearbeiten, lassen sich TableDefs- und QueryDefs-Auflistungen in der Form For Each td In TableDefs
bzw. For Each qd In QueryDefs
einsetzen. Ich möchte nun auch eine vergleichbare Schleife für Formulare, Berichte, Makros und Module programmieren. Es gibt allerdings keine geeigneten "Defs"-Auflistungen. Kennen Sie eine passende Lösung?
Diverse Anfragen
ANTWORT Diese Informationen finden Sie in den "Containers"- bzw. "Documents"-Auflistungen des "Database"-Objektes:
Dim db As DAO.Database
Dim cnt As DAO.Container
Dim doc As DAO.Document
Set db = CurrentDb()
Set cnt = db.Containers("Forms")
For Each doc In cnt.Documents
Debug.Print doc.Name
Next
Set doc = Nothing
Set cnt = Nothing
Set db = Nothing
Um die anderen Objektarten "Berichte", "Makros" oder "Module" auszulesen, ersetzen Sie 'db.Containers("Forms")' durch 'db.Containers("Reports")', 'db.Containers("Scripts")' und 'db.Containers("Modules")'.
Alle verfügbaren Container listet folgende Routine auf:
Dim db As DAO.Database
Dim cnt As DAO.Container
Set db = CurrentDb()
For Each cnt In db.Containers
Debug.Print cnt.Name
Next
Set cnt = Nothing
Set db = Nothing
WICHTIG Der Container "Tables" enthält Tabellen- UND Abfragedefinitionen! Zur klaren Trennung für das Auslesen der Tabellen- und Abfragedefinitionen sollte daher immer die Lösung über TableDefs und QueryDefs verwendet werden.
Diese Techniken können mit allen Versionen genutzt werden. Alternativ stehen spezielle Auflistungen zur Verfügung, die Sie für das Auslesen beispielsweise von Formularen wie folgt nutzen können:
Dim db As Object
Dim obj As AccessObject
Set db = Application.CurrentProject
For Each obj In db.AllForms
Debug.Print obj.Name
Next
Set db = Nothing
Analog zu "AllForms" gibt es noch die Auflistungen "AllReports" für Berichte, "AllMacros" für Makros und "AllModules" für Module zur Verfügung.