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

Ordnung im Access-Fenster: Formulare und Berichte per Mausklick schließen

Access 365 2019 2016 2013 2010 2007

Bei der täglichen Arbeit mit Datenbanken sind schnell mehrere Formulare zur Bearbeitung von Daten und Berichte zur Kontrolle in der Seitenvorschau gleichzeitig geöffnet und man findet nichts mehr wieder. Ordnung schaffen Sie mit einer VBA-Prozedur, die wir in diesem Tipp vorstellen. Sie bauen die Lösung in Ihre Formulare ein und mit einem Mausklick werden alle Formulare bis auf das geschlossen, aus dem Sie die Prozedur aufgerufen haben.

Und so gehen Sie Schritt für Schritt vor:

  1. Geben Sie die folgende Funktion in ein beliebiges Modul Ihrer Datenbank ein:
Public Function CloseAllForms(Optional NotThis As String = "")
  Dim I As Long
  Dim FrmName As String

  For I = Forms.Count - 1 To 0 Step -1
    FrmName = Forms(I).Name
    If FrmName <> NotThis Then
      DoCmd.Close acForm, FrmName, acSaveYes
    End If
  Next I

End Function
  1. Legen Sie in allen Formularen eine Schaltfläche Alle Formulare schließen (Name = btnCloseForms) an.
  2. Geben Sie bei der Ereignisprozedur "Beim Klicken" der Schaltflächen folgende Anweisung ein:
CloseAllForms Me.Name
  1. Dadurch wird die Prozedur "CloseAllForms" aufgerufen, die als optionalen Parameter den Namen eines nicht zu schließenden Formulars akzeptiert. So können dann alle Formular bis auf das, in dem auf die Schaltfläche geklickt wurde, mit einem Mausklick geschlossen werden.

Wenn Sie zum Beispiel ein Menüformular "Hauptmenü" einsetzen, können Sie die Lösung mit folgender Anweisung so ändern, dass immer alle Formulare bis auf das Hauptmenü geschlossen werden:

CloseAllForms "Hauptmenü"
  1. Speichern Sie die Änderungen und testen Sie die Lösung.

Die Routine durchläuft in einer Schleife die Auflistung "Forms", die alle geöffneten Formulare speichert und ermittelt zunächst den Formularnamen. Entspricht dieser nicht dem über "NotThis" spezifizierten, auszuschließenden Formular, sorgt ein "DoCmd.Close" für das Schließen des Formulars.

Unsere Funktion "CloseAllReports" arbeitet analog zu "CloseAllForms":

Public Function CloseAllReports(Optional NotThis As String = "")
  Dim I As Long
  Dim RepName As String

  For I = Reports.Count - 1 To 0 Step -1
    RepName = Reports(I).Name
    If RepName <> NotThis Then
      DoCmd.Close acReport, RepName, acSaveYes
    End If
  Next I

End Function

Auch diese Funktion können Sie wie oben erläutert über eine Schaltfläche aufrufen und bei Bedarf einen auszuschließenden Bericht angeben. Es ist aber beispielsweise auch möglich, über die Ereignisprozedur "Beim Laden" eines bestimmten Berichtes mit der folgenden Anweisung direkt alle anderen geöffneten Berichte schließen zu lassen:

CloseAllReports Me.Name