wer kann helfen
ich habe eine Userform mit einer Menge Comboboxen
In den Comboboxen möchte ich beim Start der Userform ("Anpassung") jeweils einen von zwei möglichen Einträgen stehen haben.
Leider sind meine Comboboxen allesamt leer beim Start.
Meine Lösung ist sicherlich nicht die eleganteste, sollte aber für mein Verständnis eigentlich funktionieren. Die Zellen auf die im Code ich verweise, enthalten entweder den Wert 0 oder 1.
Der Code:
Private Sub UserForm_Initialize()
Dim cb As Object
'Dim ctrl As MSForms.Control
'Dim CmdBtn As Klassecmd
'Funktion für die Commandbuttons festlegen - siehe Klassenmodul "Klassecmd"
'(die Eigentliche Funktion steht in dem Klassenmodul)
'Set colButtons = New Collection
'For Each ctrl In Me.Controls
' If TypeOf ctrl Is MSForms.CommandButton Then
' Set CmdBtn = New Klassecmd
' Set CmdBtn.cmd = ctrl
' colButtons.Add CmdBtn
' End If
'Next ctrl
'die Comboboxen alle befüllen
For Each cb In Anpassung.Controls
If TypeName(cb) = "ComboBox" Then
cb.AddItem "0ter Eintrag"
cb.AddItem "1ter Eintrag"
Select Case cb.Name
Case ComboBox1
cb.ListIndex = Sheets("Tabelle1").Range("A301").Value
Case ComboBox2
cb.ListIndex = Sheets("Tabelle1").Range("A401").Value
Case ComboBox3
cb.ListIndex = Sheets("Tabelle1").Range("A501").Value
Case ComboBox4
cb.ListIndex = Sheets("Tabelle1").Range("A601").Value
Case ComboBox5a
cb.ListIndex = Sheets("Tabelle1").Range("A703").Value
Case ComboBox5b
cb.ListIndex = Sheets("Tabelle1").Range("A803").Value
Case ComboBox6a
cb.ListIndex = Sheets("Tabelle1").Range("A905").Value
Case ComboBox6b
cb.ListIndex = Sheets("Tabelle1").Range("A1005").Value
Case ComboBox7a
cb.ListIndex = Sheets("Tabelle1").Range("A1107").Value
Case ComboBox7b
cb.ListIndex = Sheets("Tabelle1").Range("A1207").Value
Case ComboBox8
cb.ListIndex = Sheets("Tabelle1").Range("A1307").Value
Case ComboBox9
cb.ListIndex = Sheets("Tabelle1").Range("A1407").Value
Case ComboBox10
cb.ListIndex = Sheets("Tabelle1").Range("A1507").Value
Case ComboBox11
cb.ListIndex = Sheets("Tabelle1").Range("A1607").Value
Case ComboBox12
cb.ListIndex = Sheets("Tabelle1").Range("A1707").Value
Case ComboBox13
cb.ListIndex = Sheets("Tabelle1").Range("A1807").Value
Case ComboBox14
cb.ListIndex = Sheets("Tabelle1").Range("A1907").Value
Case ComboBox16
cb.ListIndex = Sheets("Tabelle1").Range("A2008").Value
End Select
End If
Next
End Sub
Das Ziel der ganzen Nummer war, sich auch bei mehrfachem Aufruf der Userform den zuletzt in der Combobox gewählten Wert zu merken ("0ter Eintrag" entspricht listindex = 0, "1ter Eintrag" entsprechend Listindex = 1). Den Wert in den ganzen Zellen ermittele ich wie folgt:
Private Sub ComboBox1_Change()
Sheets("Tabelle1").Unprotect
Sheets("Tabelle1").Range("A301") = ComboBox1.ListIndex
Sheets("Tabelle1").Protect
'und entsprechend auch für alle anderen
End Sub
Sprich - ich wähle mit der Combobox aus und das change-Ereignis schreibt dann bei Auswahl "0ter Eintrag" die 0 in die Zelle auf die ich dann beim erneuten Aufruf referenziere um den Listindex zu bestimmen (bzw 1 bei "1ter Eintrag"). Das funktioniert auch, nur leider interessiert das offenbar niemanden beim Start der Userform.
Kann es sein, dass sich das change-ereignis irgenwie mit der Initialisierung der Userform beißt (wird die Combobox durch die Initialisierung schon geändert)?
Im Übrigen habe ich auf der Userform nur noch Commandbuttons, die aber was anderes machen (die habe ich dank Hilfe hier im Forum in einem Klassenmodul mit ihrer Funktion belegt - das betrifft den Teil den ich ganz oben im Code auskommentiert habe).
Bin auch für kürzere Lösungen natürlich offen.
Dank euch!