Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
SteuerelementeListBox, ComboBox: BoundColumn
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
Bound Column - Gebunde Spalte das unbekannte Wesen
(Alles gilt weitgehend auch für eine Combobox)
Wieviele Anwender einer Listbox haben schon auf diese Eigenschaft gestarrt und sich gewundert, wofür diese existiert.
Dabei ist dies nichts anderes, als Excel mitzuteilen, welche Spalte einer Listbox die Value-Eigenschaft füllt. (Und bei Gebundenen Listboxen ist dies der Rückgabewert)
Die BoundColumn ist also die Zahl, an welche die Value Eigenschaft der Listbox gebunden ist!
Machen wir einen einfachen Test:
Erstellen Sie eine Userform mit einer Listbox und einem Commandbutton.
Und fügen Sie dann folgenden Code ein:
Option Explicit
' Listbox : ListBox1
'Commandbutton : CommandButton1
Private Sub CommandButton1_Click()
With ListBox1
MsgBox "Der Value ist: " & .Value & vbCrLf & _
"Der Text: " & .Text & vbCrLf & "Der Default ist:" & ListBox1
End With
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
With ListBox1
For i = 1 To 5
.AddItem i & ".Eintrag"
Next i
.ListIndex = 0
End With
End Sub
Nachdem Sie dies erledigt haben, starten Sie die Userform und wählen mal Zeilen aus und klicken dann den CommandButton.
In einer MsgBox erscheinen 3 Informationen, die alle vom Ergebnis gleich lauten.
Schauen wir uns die Informationen an:
1. Value:
Die Value Eigenschaft der ListBox
2. Text:
Die Text Eigenschaft der Listbox
3. Default:
Wenn ich keine Eigenschaft dazuschreibe.
Wir werden sehen, dass die Default-Eigenschaft der Listbox die Value Eigenschaft ist.
Bis jetzt ist noch nichts besonderes passiert aber nun:
BoundColumn im Einsatz:
Der Standardwert für BoundColumn ist 1.
Gehen Sie nun auf die Userform - im Entwicklungsmodus natürlich - wählen Sie die Listbox und ändern Sie in Eigenschaften der Listbox den Wert bei BoundColumn von 1 auf 0 und starten Sie dann wieder die Userform.
Ich warte in der Zeit mit dem Schreiben, bis Sie wieder die Tests durchgeführt ... und sich vom ersten Schock erholt haben.
Wieder da?
Überrascht? Warum erhalte ich beim Value und beim Default aufeinmal Zahlen?
Und das beim ersten Eintrag 0 und zweiten Eintrag 1 etc...
Der Default interessiert uns nicht, denn wir wissen ja schon, dass dies letztendlich der Value ist.
Tatsächlich ist es so, dass wir eine 0.te Spalte haben, in welcher Excel den ListIndex ablegt.
Richtig unverständlich wird dies auch dadurch, dass wir in den Eigenschaften bei ColumnCount die Zahl 1 sehen.
Wir müssen aber damit leben.
BoundColumn ist also wie Eingangs erklärt nichts anderes als die Spalte der Liste, deren Wert ich bei Value zurückerhalte.
Aber wofür brauche ich dann die BoundColumn überhaupt, in der Regel soll doch mein Value auch dies sein, was ich sehe?
Nun, ganz so ist dem natürlich nicht , es interessiert mich oft der Index - auch wenn man dies anders lösen kann- aber wirklich interessant wird es bei mehrspaltigen ListBoxen.
Erstellen Sie wieder eine Userform mit Listbox (Etwas breiter) und CommandButton und fügen Sie dann folgenden Code ein:
Option Explicit
' Listbox : ListBox1
'Commandbutton : CommandButton1
Private Sub CommandButton1_Click()
With ListBox1
MsgBox "Der Value ist: " & .Value & vbCrLf & _
"Der Text: " & .Text & vbCrLf & "Der Default ist:" & ListBox1
End With
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
With ListBox1
.ColumnCount = 3
.ColumnWidths = "50pt;50pt;50pt" '
For i = 1 To 5
.AddItem i & ".Eintrag"
.Column(1, i - 1) = "S2 von E" & i
.Column(2, i - 1) = "S3 von E" & i
Next i
.ListIndex = 0
End With
End Sub
Ändern Sie nun die BoundColumn von 0 bis 3 und schauen Sie sich jeweils die Ergebnissse an.
Und schon sehen Sie, wie wichtig BoundColumn sein kann.
Es ist richtig, dass ich an die Positionsinhalte auch über List herankomme aber BoundColumn ist für gebundene Steuerelemente (diese werden an anderer Stelle erklärt) ein ganz wichtiger Faktor.
Und ist es nicht schön, einfach auch nur zu wissen wofür was gut ist?
P.S. Der Code ist weitgehend nur dazu da, um ein Demonstrationsobjekt zu erschaffen.
Natürlich kann man dort anders vorgehen aber dies war die schnellste Art.
Wir haben BoundColumn immer händisch gesetzt, natürlich kann man dies auch im Code tun.
Aber dies auszutüfteln überlasse ich nun ihnen.
Weitere Artikel der Gruppe: Steuerelemente Aus Excel VBA
Nach oben