Home > Artikel > Ausgabe 2/2019 > Formulare mehrfach öffnen mit Dictionary

Formulare mehrfach öffnen mit Dictionary

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

In einem früheren Artikel namens Mehrere Instanzen eines Formulars haben wir gezeigt, wie Sie ein Formular einer Datenbank mehr als einmal öffnen können. Dabei haben wir ein Collection-Objekt verwendet, um die Objektvariablen mit den verschiedenen Instanzen des Formulars zu speichern. Im vorliegenden Artikel schauen wir uns an, wie wir diese Objektvariablen in einem Dictionary-Objekt statt in einem Collection-Objekt verwalten können und welche Vorteile dies bringt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1902_DictionaryFormularMehrfach.accdb.

Das Dictionary-Objekt

Das Dictionary-Objekt erläutern wir im Detail im Artikel Auflistungen mit dem Dictionary-Objekt – daher hier nur die notwendigsten Informationen für seine Nutzung. Um das Dictionary-Objekt zu verwenden, fügen Sie dem VBA-Projekt einen Verweis auf die Bibliothek Microsoft Scripting Runtime hinzu (siehe Bild 1).

Verweis auf die Bibliothek Microsoft Scripting Runtime

Bild 1: Verweis auf die Bibliothek Microsoft Scripting Runtime

Die Verweise auf die vom Hauptformular frmKunden­uebersicht aus geöffneten Instanzen des Formulars frmKunde (siehe Bild 2) speichern wir in einem Dictionary-Objekt, dessen Deklaration wir im Klassenmodul des Formulars frmKundenuebersicht unterbringen. Dazu legen wir dort im Kopf des Moduls die folgende Anweisung an:

Mehrfaches Öffnen des gleichen Formulars mit verschiedenen Datensätzen

Bild 2: Mehrfaches Öffnen des gleichen Formulars mit verschiedenen Datensätzen

Dim dicForms As Dictionary

Die Position der neu zu erstellenden Formulare speichern wir in zwei Variablen namens intPosX und intPosY, die wir ebenfalls dort deklarieren:

Dim intPosX As Integer

Dim intPosY As Integer

Das Hauptformular frmKundenuebersicht zeigt die Einträge für die Kunden in einem Listenfeld an (siehe Bild 3).

Formular zum Öffnen der Detailformulare

Bild 3: Formular zum Öffnen der Detailformulare

Per Doppelklick auf einen der Listeneinträge kann der Benutzer das Formular zum jeweiligen Kunden öffnen. Dies löst die Prozedur aus Listing 1 aus. Damit diese korrekt funktioniert, muss allerdings beim Laden des Formulars die Variable für das Dictionary-Objekt initialisiert worden sein:

Private Sub lstKunden_DblClick(Cancel As Integer)

     Dim frm As Form_frmKunde

     Dim bolVorhanden As Boolean

     Dim i As Integer

     Static lngOffsetY As Long

     Dim lngXFaktor As Long

     Dim lngYFaktor As Long

     If Not dicForms.Exists(Me!lstKunden) Then

         Set frm = New Form_frmKunde

         With frm

             .Visible = True

             .Caption = Me!lstKunden & " - " & Me!lstKunden.Column(1)

             .Filter = "KundeID = " & Me!lstKunden

             .FilterOn = True

         End With

         dicForms.Add Me!lstKunden, frm

         GetScreenInfo lngXFaktor, lngYFaktor

         intPosX = intPosX + 1

         intPosY = intPosY + 1

         On Error Resume Next

         DoCmd.MoveSize intX * (intPosX - 1) * lngXFaktor, intY * (intPosY - 1) * lngYFaktor + lngOffsetY * lngYFaktor

         If Err.Number = 2498 Then

             intPosX = 1

             intPosY = 1

             lngOffsetY = intY + 30

             DoCmd.MoveSize intX * (intPosX - 1) * lngXFaktor, intY * (intPosY - 1) * lngYFaktor + lngOffsetY * lngYFaktor

         End If

     Else

         dicForms.Item(Me!lstKunden).SetFocus

     End If

End Sub

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!