Kombinationsfelder dynamisch füllen

Die meisten Kombinationsfelder beziehen Ihre Daten aus einer Tabelle oder Abfrage. Manchmal liegen die anzuzeigenden Daten aber nicht in Tabellenform vor – weil es sich nicht lohnt, dafür eine Tabelle anzulegen, oder weil diese aus anderen Quellen stammen, wie etwa Benutzer oder Benutzergruppen. Am Beispiel von Datumsangaben zeigt dieser Beitrag, wie Sie Kombinationsfelder zur Laufzeit mit Daten füllen, die nicht aus einer oder mehreren Tabellen stammen.

Die Eigenschaft Herkunftsart eines Kombinationsfeldes entscheidet darüber, woher dieses seine Daten beziehen soll. üblicherweise heißt der Wert dieser Eigenschaft Tabelle/Abfrage und die Eigenschaft Datensatzherkunft liefert die passende Datenquelle. Der zweite Wert namens Wertliste ermöglicht die Angabe einer durch Semikola getrennten Liste von Elementen für die Eigenschaft Datensatzherkunft, die je nach Spaltenanzahl unterschiedlich ausgegeben werden. Die dritte Variante namens Feldliste ist eher für Spezialanwendungen gedacht und liefert die Felder der in Datensatzherkunft angegebenen Tabelle als Elemente des Kombinationsfeldes.

Bei den beiden zuerst genannten Einstellungen Tabelle/Abfrage und Wertliste können Sie den Wert für Datensatzherkunft natürlich nachträglich per VBA anpassen und damit eine gewisse Dynamik erreichen. Das Gleiche gilt für die vierte Möglichkeit, die nicht auf den ersten Blick ersichtlich ist: Dabei weisen Sie der Eigenschaft Herkunftsart den Namen einer VBA-Funktion mit spezieller Syntax zu, mit der Sie die einzufügenden Daten definieren.

Und es gibt auch noch eine fünfte Variante, in deren Genuss allerdings nur Benutzer von Access XP und höher kommen: Dabei können Sie der Eigenschaft Recordset eines Steuerelements direkt ein DAO- oder ADO-Recordset zuweisen.

Bis auf die erste und dritte können Sie alle Varianten einsetzen, um Daten, die nicht aus Tabellen stammen, in Kombinationsfeldern zur Auswahl bereitzustellen. Natürlich können Sie auch eine Tabelle temporär füllen und als Datensatzherkunft des Kombinationsfeldes angeben, aber dieser Ansatz soll hier nicht weiter besprochen werden.

Beispielanwendung

Als Beispiel für die verschiedenen Varianten zum dynamischen Füllen eines Kombinationsfeldes dient die Auswahl eines Jahres. Das Beispielformular enthält drei Textfelder, in die Sie das erste, das letzte und das aktuell anzuzeigende Jahr eingeben können. Mit einem Klick auf eine Schaltfläche füllen Sie dann die Kombinationsfelder mit den drei verschiedenen Varianten.

Kombinationsfeld füllen per Wertliste

Für kleinere Datenmengen bietet sich eine Wertliste an. Die Wertliste enthält die einzelnen Einträge mit Semikola als Trennzeichen. Für die Anzeige von Jahren sieht dies ausschnittsweise so aus:

2000;2001;2002;2003;2004...

Natürlich geben Sie diese Liste nicht von Hand ein, sondern lassen den Rechner für sich arbeiten. Wie das funktioniert, zeigt Listing 1. Die Laufvariable i (die Sie auch intAktuellesJahr nennen könnten) enthält jeweils das aktuelle der in einer Schleife durchgelaufenen Jahre. Innerhalb der Schleife fügt eine Anweisung das jeweils aktuelle Jahr plus ein Semikolon an die in der Variablen strJahre gespeicherte Zeichenkette an.

Listing 1: Füllen eines Kombinationsfeldes mit einer dynamisch zusammengestellten Wertliste

Dim i As Integer
Dim strJahre As String
For i = Me!txtErstesJahr To Me!txtLetztesJahr
    strJahre = strJahre & i & ";"
Next i
Me!cboJahreAusWertliste.RowSourceType = "Wertliste"
Me!cboJahreAusWertliste.RowSource = strJahre
Me!cboJahreAusWertliste.DefaultValue = Me!txtAktuellesJahr

Anschließend werden die Eigenschaften Herkunftstyp auf Wertliste und Datensatzherkunft auf den soeben zusammengesetzten Ausdruck eingestellt. Damit das Kombinationsfeld das im Textfeld txtAktuellesJahr enthaltene Jahr anzeigt, stellen Sie seine Eigenschaft DefaultValue direkt auf den im Textfeld enthaltenen Wert ein.

Dies funktioniert auch für die Anzeige von Daten in mehr als einer Spalte. Access fügt die in dem Wertlistenausdruck enthaltenen Elemente dann von links nach rechts und dann von oben nach unten in das Kombinationsfeld ein.

Kombinationsfeld füllen per Recordset

Seit Access XP (2002) können Sie Formularen und Steuerelementen wie dem Kombinationsfeld und dem Listenfeld per VBA Recordsets zuweisen. Das eröffnet verschiedene Möglichkeiten.

Die naheliegendste ist das Erzeugen eines Recordsets auf Basis einer Tabelle oder Abfrage und das anschließende Zuweisen zur Eigenschaft Recordset des Kombinationsfelds. Dies ließe sich ausnutzen, um die enthaltenen Daten per Code zu sortieren, zu filtern oder anderweitig zu manipulieren.

Die zweite in Kombination mit ADO-Recordsets interessante Möglichkeit ist der Einsatz ungebundener Recordsets. Dabei handelt es sich um ein ganz normales Recordset, das allerdings nicht auf einer Tabelle basiert, sondern komplett per VBA-Code erzeugt wird – was nicht nur das Füllen mit den gewünschten Daten, sondern auch das Definieren der enthaltenen Felder betrifft.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar