In Excel Combobox mit Recordset befüllen

Im Netz findet man die abenteuerlichsten Anleitungen, wie man Daten aus einem Recordset in eine Combobox eines benutzerdefinierten Formulares übernehmen kann. Da wird beispielsweise gesagt, man müsse die Daten erst in ein eigenes Worksheet kopieren um sie dann mit einem Zellbezug in die Combobox zu übernehmen.

Dabei ist die Lösung in VBA eigentlich recht simpel.

Function Fill_Combobox(ByRef cbo As ComboBox, ByVal rs As ADODB.Recordset, ByVal colWidth As String)
    Dim aryColumnWidth() As String
    Dim i As Integer
   
    aryColumnWidth = Split(colWidth, ";")
    cbo.Clear
    cbo.ColumnCount = UBound(aryColumnWidth) + 1
    cbo.ColumnHeads = False
    cbo.ColumnWidths = colWidth
   
    Do Until rs.EOF
        With cbo
            .AddItem
            For i = 0 To UBound(aryColumnWidth)
                .List(.ListCount - 1, i) = rs.Fields(i)
            Next
        End With
        rs.MoveNext
    Loop
End Function

Diese Prozedur erhält als Parameter sowohl einen Verweis auf die zu befüllende Combobox als auch auf das Recordset mit den Daten. Zusätzlich werden in einer durch Semikolons getrennten Liste noch die Spaltenbreiten mit übergeben.

Diese Liste wird auch verwendet, um festzustellen, wieviele Spalten ausgegeben werden sollen. Hierzu wird sie mit der Split()-Funktion in ein Array umgewandet und die Anzahl der Array-Einträge ergibt dann die Anzahl der anzuzeigenden Spalten.

Mit der Do-Loop-Schleife wird dann das Recordset durchgegangen und pro Datensatz wird mit cbo.AddItem ein neuer Eintrag in der Combobox-Liste angelegt. Über die For-Next-Schleife werden dann die Werte aus dem Recordset in die Liste übertragen.

Eine typische Verwendung der Prozedur könnte so aussehen:

Fill_Combobox cboIhreCombobox, rsIhrRecordset, "0;50"

womit die Daten aus dem Recordset rsIhrRecordset in die das Control cboIhreCombobox eingetragen wird. Die erste Spalte wird dabei ausgeblendet (Breite = 0) während die Breite der zweiten Spalte auf den Wert 50 gesetzt wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.