Access Anfänger: ComboBox per VBA füllen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

In manchen Fällen muss ein Kombinationsfeld zur Laufzeit mittels VBA mit Werten versorgt werden. Der Grund hierfür kann z.B. eine veränderte Grundlage der Auswahldaten sein. Mit dem folgenden Code ist es möglich, die Datensatzherkunft eines Kombinationsfelds zur Laufzeit zu verändern.

Lösung

In der Annahme, dass der Herkunftstyp der Datensatzherkunft eine Werteliste sein soll, und als ausgewählter Wert nicht der angezeigte Text, sondern dessen ID aus der zugrundeliegenden Tabelle übernommen werden soll, werden folgende Einstellungen benötigt:

Eigenschaft Wert
Herkunftstyp Werteliste
Gebundene Spalte 1
Spaltenanzahl 2
Spaltenbreiten 0cm;5cm

Variante 1

(langsam - aber verständlich)

Private Sub EineProzedurImFormular()
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim strListe As String
   Dim rs       As DAO.Recordset
 
   'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
   Set rs = CurrentDb.OpenRecordset("SELECT ID_key, Bezeichnung " & _
                                    "FROM Tabelle WHERE Einschraenkung " & _
                                    "OrderBy Bezeichnung")
 
   'Nur weitermachen wenn Daten geliefert wurden
   If rs.RecordCount > 0 Then
      Do While Not rs.EOF
         strListe = strListe & rs!ID_key & ";" & rs!Bezeichnung & ";"
         rs.MoveNext
      Loop
   Else
      MsgBox "Es sind keine Daten zum Füllen des Kombifeldes vorhanden!"
      Exit Sub
   End If
   rs.Close
 
   'Festlegen der Eigenschaften des Kombinationsfelds _
    (ist vorzugsweise im Formularentwurf vorzunehmen)
   With Me.cboDaten
      .RowSourceType = "Value List"
      .ColumnCount = 2
      .ColumnWidths = "0cm;5cm"
      .BoundColumn = 1
      .RowSource = strListe
   End With
End Sub

Variante 2

Private Sub EineProzedurImFormularModul()
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Const SELECT_QRY As String = _
         "SELECT ID_key, Bezeichnung " & _
         "FROM Tabelle WHERE Einschraenkung " & _
         "OrderBy Bezeichnung"
 
   'Festlegen der Eigenschaften des Kombinationsfelds _
    (wäre bis auf die Eigenschaft RowSource 'Datensatzherkunft' _
    vorzugsweise im Formularentwurf vorzunehmen)
   With Me.cboDaten
      .RowSourceType = "Value List"
      .ColumnCount = 2
      .ColumnWidths = "0cm;5cm"
      .BoundColumn = 1
      .RowSource = CurrentProject.Connection _
                   .Execute(SELECT_QRY).GetString(, , ";", ";")
   End With
End Sub


Wiki hinweis.png

Hinweis:

Eine Werteliste kommt in erster Linie in Betracht, wenn deren Werte in Stein gemeißelt (anerkannt unveränderbar) sind (z. Bsp. Wochentage, Monatsnamen, diverserse physikalische Einheiten, etc.) und zur Steuerung von Formular-Methoden verwendet wird. Gebundene Kombinationsfelder werden in der Regel bequemer durch eine Lookup-Tabelle und entsprechende Datensatzherkunft mit Zeilen versorgt.