Steuerelemente mit Gedächtnis

Zusammenfassung

Lernen Sie, wie man Listenfeldern beibringt, sich die zuletzt markierten Werte zu merken.

Techniken

Formulare, Listenfelder, VBA

Voraussetzungen

Access 97 und höher

Beispieldatenbank

ListenfelderMitGedaechtnis97.mdb, ListenfelderMitGedaechtnis00.mdb

André Minhorst, Duisburg

Wenn ein Benutzer ein Formular öffnet, eine Auswahl etwa anhand eines ungebundenen Listenfeldes trifft und diese beim nächsten öffnen des Formulars wieder vorfinden möchte, hat er üblicherweise Pech. Zumindest, soweit er keine speziellen Vorbereitungen dafür trifft. Was prinzipiell für alle Steuerelemente interessant ist, veranschaulicht dieser Beitrag anhand von Text-, Kombinations- und Listenfeldern.

Die einfachste Variante, einem Steuerelement beim öffnen eines Formulars den zuletzt geöffneten Wert zuzuweisen, bietet der Einsatz einer globalen Variablen. Beim denkbar einfachsten Beispiel aus einem Formular mit einem ungebundenen Textfeld (siehe Bild 1) benötigen Sie nur eine global deklarierte Variable sowie zwei Routinen mit wenigen Zeilen.

Die globale Variable deklarieren Sie in einem neuen Standardmodul namens mdlGlobal:

Public gstrText As String

Anschließend fügen Sie dem Formular zwei Ereignisprozeduren für die Ereignisse Beim öffnen und Beim Schließen zu.

Die folgende Routine speichert beim Schließen des Formulars den aktuellen Inhalt des Textfeldes in der globalen Variablen gstrText:

Private Sub Form_Close()
    ''Beim Speichern: Schreibe den Inhalt
    ''des Textfeldes in die Variable
    gstrText = Me!txtText
End Sub

Beim öffnen des Formulars soll der Inhalt dieser Variablen – soweit vorhanden – wieder eingelesen werden. Das erledigt die zweite Ereignisprozedur:

Private Sub Form_Open(Cancel As Integer)    ''Wenn gstrText nicht leer ...
    If Not gstrText = "" Then        ''... schreibe den Text in das
        ''Textfeld
        Me!txtText = gstrText
    End If
End Sub

Bei Kombinationsfeldern ist die Sache genauso einfach.

Das folgende Beispiel aus Bild 2 beschäftigt sich mit einem Kombinationsfeld, das die Artikel der Nordwind-Datenbank anzeigen soll und dazu über die Datensatzherkunft

SELECT Artikel.[Artikel-Nr],

Artikel.Artikelname FROM Artikel;

an diese Tabelle gebunden ist.

Damit das Kombinationsfeld nicht den im ersten Feld der Abfrage enthaltenen Primärschlüssel der Tabelle, sondern den Artikelnamen aus dem zweiten Feld anzeigt, enthalten die Eigenschaften Spaltenanzahl und Spaltenbreite die Werte 2 und 0cm.

Auch der im Kombinationsfeld angezeigte Wert kann in einer einzigen globalen Variablen gespeichert werden:

Public glngArtikelnummer As Long

Die Routine, die den aktuellen Datensatz des Kombinationsfelds in der globalen Variablen glngArtikelnummer speichern soll, sieht so aus:

Private Sub Form_Close()
    ''Wenn Kombinationsfeld nicht leer ...
    If Not IsNull(Me!cboArtikel) Then
        ''... schreibe Inhalt in Variable
        glngArtikelnummer = _            Me!cboArtikel
    End If
End Sub

Das Einlesen beim öffnen des Formulars übernimmt die folgende Routine:

Private Sub Form_Open(Cancel As Integer)
    ''Wähle den gespeicherten Wert aus
    Me!cboArtikel = glngArtikelnummer
End Sub

Falls Sie dafür sorgen wollen, dass das Kombinationsfeld beim ersten öffnen des Formulars den ersten Eintrag anzeigt, verwenden Sie die folgende Routine:

Private Sub Form_Open(Cancel As Integer)
    ''Wenn kein Wert zwischengespeichert
    ''ist ...
    If glngArtikelnummer = 0 Then
        ''... wähle den ersten Wert aus,
        Me!cboArtikel = _            Me!cboArtikel.ItemData(0)
    Else
        ''sonst den gespeicherten Wert:
        Me!cboArtikel = _            glngArtikelnummer
    End If
End Sub

Bild 1: Ein einfaches Formular mit einem ungebundenen Textfeld

Bild 2: Formular mit einem ungebundenen, aber mit einer Datensatzherkunft versehenen Kombinationsfeld

Diese prüft, ob die Variable den Wert 0 enthält (was bei Variablen des Datentyps Long der Standardwert ist – bei anderen Datentypen müssen Sie den Vergleich entsprechend anpassen) und stellt in diesem Fall das Kombinationsfeld auf den ersten Eintrag ein.

Listenfelder verhalten sich diesbezüglich genauso wie Kombinationsfelder.

Neben der globalen Variablen gibt es noch eine zweite Variante, wie Sie den Inhalt von Steuerelementen in Variablen speichern können – und zwar über eine statische Variable.

Eine globale Variable hat die Eigenschaft, dass sie – innerhalb einer Routine festgelegt und gefüllt – ihren Wert zwischen zwei Aufrufen ein und derselben Routine beibehält.

Quellcode 1: Diese Funktion merkt sich in einer statischen Variablen eine Artikelnummer.

Public Function Artikelnummer(Optional varArtikelnummer As Variant)
    Static svarArtikelnummer As Variant
    ''Wenn keine Artikelnummer übergeben wurde, ...
    If IsMissing(varArtikelnummer) Then
        ''verwende die statisch gespeicherte Artikelnummer,
        Artikelnummer = svarArtikelnummer
    Else
        ''sonst die per Parameter übergebene Artikelnummer
        svarArtikelnummer = varArtikelnummer
    End If
End Function

Nun können Sie die Variable weder in der Beim öffnen- noch in der Beim Schließen-Ereignisprozedur unterbringen, weil ja beide Routinen auf diese Variable zugreifen müssen, aber ihr Gültigkeitsbereich nur auf eine Routine festlegt werden kann.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar