Option Explicit
Sub CheckboxToggle(Cbo As MSForms.CheckBox)
If Cbo.Value Then
Range("A" & GetIndex(Cbo)).Font.ColorIndex = 8
Else
Range("A" & GetIndex(Cbo)).Font.ColorIndex = 10
End If
End Sub
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 = str & Mid$(Cbo.Name, i, 1)
Case Else
Exit For
End Select
Next
GetIndex = CLng(str)
End Function
Private Sub CheckBox1_Click()
Call CheckboxToggle(CheckBox1)
End Sub
Private Sub CheckBox2_Click()
Call CheckboxToggle(CheckBox2)
End Sub
usw.
Besser wäre jedoch du würdest dafür Formular-Steuerelemente nehmen. Dann kannst du nämlich, dank Application.Caller, für alle Kontrollfelder nur eine einzige Prozedur schreiben und weißt diese dann allen zu.
Du kannst damit also auf das
Private Sub CheckBox1_Click()
Call CheckboxToggle(CheckBox1)
End Sub
Private Sub CheckBox2_Click()
Call CheckboxToggle(CheckBox2)
End Sub
usw.
verzeichnten.
PS: Anstatt den Index aus dem Kontrollfeldnamen zu ziehen, kann man auch die Zelle auf der das Control liegt bestimmen und davon dann die Zeile nehmen.
Gruß
|