Hallo Herbert
Nun ja, Ich finde beides hat seine Vor- und Nachteile. Formularsteuerelemente sind einfacher zu handeln, sehen schicker aus und sind stabiler in der Darstellung, mit ActiveX-Steuerelementen kann man dafür etwas mehr anstellen, sofern man sich bei den Standardelementen bewegt sind diese auch auf dem Tabellenblatt verwendbar. Ungewöhnliche ActiveX-Elemente können auf dem Tabellenblatt aber auch mal verzerrt oder gar nicht dargestellt werden. ActiveX-Elemente sind eher für Userforms gedacht. Dort sind sie stabiler können vereinzelt aber trotzdem Fehler erzeugen. Bei den Elementen von Microsoft Forms 2.0 sollten aber keine Probleme auftreten.
Es verwirrt mich auch, dass die Sub-Routine von VBA mit Sub Kontrollkästchen benannt wird, ich die Steuerelemente aber mit CheckBox... ansprechen muss.
Wenn du ein Formularsteuerelement neu einfügst und den Namen nicht sofort änderst hat es grundsätzlich erstmal zwei Namen. Einen deutschen und einen englischen. Du kannst die Checkbox dann mit a = ActiveSheet.CheckBoxes("Check Box 4933").Name oder mit a = ActiveSheet.CheckBoxes("Kontrollkästchen 4933").Name ansprechen. Zurückgegeben wird in jedem Fall der englische Name, da VBA englisch spricht. Sobald du den Namen änderst (entweder in dem Namensfeld links von der Formelleiste oder über den Namensmanager oder z.B. per VBA mit ActiveSheet.CheckBoxes("Kontrollkästchen 4933").Name = "cb4933" ist nur noch der geänderte Name ansprechbar und kann zurückgegeben werden.
Wenn du das obere Makro also um diese drei Zeilen erweiterst und nochmal ausführst kannst du dir im folgenden viel Tipparbeit sparen.
cb.Name = Replace(cb.Name, "Check Box ", "cb")
cb.Name = Replace(cb.Name, "Kontrollkästchen ", "cb")
cb.OnAction = cb.Name & "_Klicken"
Das gesamte Makro sieht dann so aus.
Sub Schaltfläche8_Klicken()
Dim Sh As Worksheet
Dim cb As CheckBox
'Sheets("A_blatt").Activate
Range("a1").Select
For Each cb In ActiveSheet.CheckBoxes
cb.Visible = True
cb.Caption = "K.A."
cb.Name = Replace(cb.Name, "Check Box ", "cb")
cb.Name = Replace(cb.Name, "Kontrollkästchen ", "cb")
cb.OnAction = cb.Name & "_Klicken"
Next cb
End Sub
Im unteren Makro musst du dann natürlich ebenfalls auf die Checkboxes-Auflistung zugreifen und den Namen dort als Text hinterlegen. Dann gehts. Dabei gibt es zwei Möglichkeiten die ich dir hier mal dargestellt habe.
Sub cb4933_Klicken()
a = ActiveSheet.CheckBoxes("cb4933").Name
b = aktivesheet.CheckBoxes("cb4933").Caption
End Sub
Sub cb4934_Klicken()
With ActiveSheet.CheckBoxes("cb4934")
a = .Name
b = .Caption
End With
End Sub
Grundsätzlich gibt es in der VBA-Programmierung viele verschiedene Wege, um ans Ziel zu kommen. Daher gestatte mir die Frage: Was willst du denn eigentlich machen?
Gruß Mr. K.
|