Nun, ich weiß ich was ich da groß erklären soll. Der Code ist selbsterklärend bzw. nicht weiter kompliziert.
Private Function GetIndex(Cbo As MSForms.CheckBox) As Long
Dim str As String
Dim i As Long
For i = Len(Cbo.Name) To 1 Step -1
Select Case Mid$(Cbo.Name, i, 1)
Case "0" To "9"
str = Mid$(Cbo.Name, i, 1) & str
Case Else
Exit For
End Select
Next
GetIndex = CLng(str)
End Function
Das einzige was vielleicht relevant wäre, wäre die Schleife und Select Case.
-
die For-Schleife läuft rückwärts durch das Step -1. Es wird also der Name der CheckBox von hinten Zeichenweise (Mid$( , ,1)) durchlaufen und wenn dies eine Ziffer ist, dann wird sie nach str übernommen. Es wird also der Index aus dem Namen extrahiert (z.B. aus CheckBox123 -> str = "123")
-
und Select Case ist offensichtlich das Switch-Statement aus Java
>> aber Cbo As MSForms.CheckBox? Ist MSForms.CheckBox dann sozusagen mien Variablentyp?
Richtig.
MSForms ist übrigens der Bibliothekname. Insofern kein anderer Datentyp CheckBox im Projekt existiert, könnte man sich dies also sparen (aus Angewohnheit schreibe ich so etwas jedoch immer davor).
Wirf am besten mal auch einen Blick in den Objektkatalog (F2 Taste im VBA-Editor; oder Menü Ansicht).
Drück mal im VBA-Editor die F1 Taste (vorher alle Codefenster schließen, auch ggf. UserForms) und schau dir die Grundlagen der Programmiersprache an.
>> Andere Frage: Ich habe immer im Internet gelesen, dass man die Formular-Steuerelemente nicht über VBA prorgammieren kann, das habe ich dann wohl falsch verstanden oder? Dann werde ich mir die auf jeden Fall auch nochmal anschauen.
Das ist teilweise richtig, aber auch nur zum Teil. Man kann an diese ein Makro binden (OnAction); idR. wird dieses dann bei einem Click darauf ausgeführt.
Manchmal eigenen sich diese jedoch besser als ActiveX-Steuerelemente. Und so einen Fall liegt bei dir vor.
kl. Beispiel: (Erstell ein CheckBox (Formular-Steuerelement), rechtsklicke drauf und weise ihm das untrige Makro zu - dies kannst beliebig oft tun)
'in einem Modul platzieren
Option Explicit
Sub CheckBox_OnAction()
Dim shp As Excel.Shape
Select Case VarType(Application.Caller)
Case vbString
On Error Resume Next
Set shp = ActiveSheet.Shapes(Application.Caller)
On Error GoTo 0
Case Else
Exit Sub
End Select
If shp Is Nothing Then
Call MsgBox("Application.Caller = '" & Application.Caller & "' nicht gefunden.", vbCritical)
Exit Sub
End If
If shp.Type = msoFormControl Then
If shp.FormControlType = xlCheckBox Then
Call MsgBox("'" & shp.Name & "' ist eine CheckBox.", vbInformation)
Else
Call MsgBox("'" & shp.Name & "' ist ein Formular-Steuerelement, jedoch keine CheckBox.", vbInformation)
End If
Else
Call MsgBox("'" & shp.Name & "' ist keine Formular-Steuerelement.", vbInformation)
End If
End Sub
|