News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

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.