In diesem Abschnitt beschäftigen wir uns mit dem Möglichkeiten, Daten über ein Kombinationsfeld (ComboBox) mit einer Liste auszutauschen. Zunächst sehen wir uns die Möglichkeiten an, Daten in die Box zu schreiben. Da gibt es, wie wir sehen werden, einige.

RowSource

Diese Eigenschaft kann auf zwei Arten gesetzt werden.
  • Über das Eigenschaftenfenster

  • Neben der Bezeichnung RowSource wird der Bereich eingetragen. Im Beispiel A1:A10 als Zellbereich. Es können auch mehrspaltige Inhalte eingefügt werden, dann muß neben ColumnCount die Zahl der gewünschten Spalten eingegeben werden. (Standard ist 1).

  • Mit VBA
  • Private Sub UserForm_Activate()
    ComboBox1.RowSource = "A1:A10"
    End Sub

    Wenn der Füllbereich über RowSource gesetzt wird, spricht man auch von einem gebundenen Kombinationsfeld. In diesem Fall kann die Spaltenüberschrift in der Auswahlliste mit dargestellt werden. Dazu muß der Parameter bei ColumnHeads auf True gesetzt sein.

    Range

    Eine weitere Möglichkeit einen Bereich an das Kombinationsfeld zu übergeben, ist die Verwendung einer Range:
    Private Sub UserForm_Activate()
    ComboBox1.List = Sheets("Tabelle1").Range("A1:A10").Value
    End Sub
    ComboBox1.RowSource = "A1:K1" geht leider nicht. Sollen Inhalte aus einer Zeile angezeigt werden, geht das zum Beispiel mit dieser Anweisung:
    Private Sub UserForm_Activate()
    ComboBox1.List = Application.WorksheetFunction.Transpose(Range("A1:D1"))
    End Sub

    AddItem

    Die Anweisung AddItem eignet sich besondern gut, wenn es darum geht, aus einer Liste nur die Werte zu übernehmen, die bestimmte Kriterien erfüllen. Im linken Beispiel ist zunächt der Grundaufbau dargestellt. Auf der rechten Seite werden nur die Zellen übernommen, die auch einen Inhalt haben.
    Die Anweisung     Ohne leere Zellen
    Private Sub UserForm_Activate()
    Dim iAnzahl As Integer
    For iAnzahl = 1 To 10
        With ComboBox1
            .AddItem Sheets("Tabelle1").Cells(iAnzahl, 1)
        End With
    Next iAnzahl
    End Sub
    Private Sub UserForm_Activate()
    Dim iAnzahl As Integer
    For iAnzahl = 1 To 10
        With ComboBox1
            If Sheets("Tabelle1").Cells(iAnzahl, 1) <> "" Then
                .AddItem Sheets("Tabelle1").Cells(iAnzahl, 1)
            End If
        End With
    Next iAnzahl
    End Sub
     
    Nun kennen wir einige Möglichkeiten, ein Kombinationsfeld mit Daten zu bestücken. Bleibt zu klären, wie wir sie dort wieder herausbekommen, bzw. wie stellen wir sie für unsere Anwendung zur Verfügung. Dazu muß, das Kombinationsfeld mit einem Quelltext verbunden werden, der das steuert. Es gibt wieder verschiedene Möglichkeiten das zu tun, eine Auswahl:
    Verwendung des ausgewählten Textes. Das Beispiel öffnet das Tabellenblatt, dessen Name im Kombinationsfeld ausgewählt wurde.
      
    Private Sub ComboBox1_Change()
    Sheets(ComboBox1.Text).Activate
    End Sub
    
    In Zelle A2 wird der Wert aus dem Kombinationsfeld eingetragen.
    Private Sub ComboBox1_Change()
    Sheets("Tabelle1").Cells(2, 1) = ComboBox1.Value
    End Sub
    
    In Zeile 2 wird der Inhalt des Kombinationsfeldes, in die Spalte geschrieben, die der Listindex vorgibt. - Hinweis: ListIndex ist die Zeilennummer innerhalb des Kombinationsfeldes. Achtung: die Numerierung beginnt bei Null. Deshalb im Beispiel ListIndex + 1, da es keine Spalte mit dem Wert Null gibt.
    Private Sub ComboBox1_Change()
    Sheets("Tabelle1").Cells(2, ComboBox1.ListIndex + 1) = ComboBox1.Value
    End Sub