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