Daten rein und raus - Kombinationsfeld |
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.
Diese Eigenschaft kann auf zwei Arten gesetzt werden.
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). | ||
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.
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 |
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 |
Auswahl im Programm verarbeiten |
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
|