AW: Combobox mit NR. FÜLLEN
31.10.2021 20:16:44
Yal
Hallo Uwe,
Sorry für Hajo. Er hilft gern (und gut) aber meckert noch gerner (und Dank Textbausteine ausführlicher). (Sorry Hajo, aber Du hast es nicht gestohlen!)
Durch den Eigenschaft ColumnCount kannst Du definieren, dass deine Auswahlliste mehrere Spalten haben kann. Im Folgenden 2, die die Nummer 0 und 1 haben.
Befüllt wird wie folgt:
Private Sub UserForm_Initialize()
Dim i
With ComboBox1
.Clear
For i = 1 To 5
.AddItem
.List(.ListCount - 1, 0) = CStr(i)
.List(.ListCount - 1, 1) = "Projekt " & i
Next
End With
End Sub
Ein Tabellenbereich kann auch als "ControlSource" eingegeben werden.
Mit der Eigenschaft ColumnWitdth kannst Du die Breite der einzelne Column festlegen:
ComboBox1.ColumnWidths = "20 Pt;49,95 Pt"
(Oder direkt in der Eigenschaftsfenster eingegeben werden. "Ansicht", "Eigenschaftsfenster")
Die Checkboxe, wovon nur eine angeklickt werden darf, sind OptionButton (siehe in der Werkzeugliste einen Kreis mit einem Punkt in der Mitte).
Diese -in deinem Fall 3- OptionButton müssen dieselbe Eigenschaft "Group" haben, es ist irgendeine Text als Gruppename, z.B. "grpDatei". Dadurch, dass die Optionbutton in dieselbe Gruppe sind, wird der eine ausgeschaltet, wenn der andere eingeschaltet wird.
Die Gruppe kann leider nicht verwendet, um der gesetzte OptBtn innerhalb einer Gruppe zu lesen, was das Lesen der Werte lästig macht.
Man muss in Schleife gehen. Namensgebung ist in dem Fall von besonderer Bedeutung:
Entweder heissen Sie OptionButton1, OptionButton2, OptionButton3:
Private Sub cmdOk_Click()
Dim i
For i = 1 To 3
With Me.Controls("OptionButton" & i)
If .Value Then Debug.Print .Name & " ist ausgewählt (" & .Caption & ")."
End With
Next
Me.Hide
Unload Me
End Sub
Alternativ mit einem "For Each" über eine Liste (Array), wenn diese sprechende Namen haben:
Private Sub cmdOk_Click()
Dim E
For Each E In Array("OptBtn_Kaufteile", "OptBtn_Fertigungsteile", "OptBtn_Elekto")
If E.Value Then Debug.Print E.Name & " ist ausgewählt (" & E.Caption & ")."
Next
Me.Hide
Unload Me
End Sub
Debug.Print gibt Zwischenstände in der VB-Editor Direktfenster raus (Kennst Du wahrscheinlich schon), was zur Debug-Zweck sehr hilfreich ist (Ansicht, Direktfenster). Lokal-Fenster kennst Du? Zeigt Zustand von Variablen im Schritt-Modus. Auch Lern-Beschleunigend: Cursor auf einem Keyword und Strg+F1 führt zu Online-Hilfe. Meistens mit Code-Beispiele.
VG Yal