Private Sub CheckBox1_Click()
Dim MyLeft As Double
Dim MyTop As Double
Dim MyHeight As Double
Dim MyWidth As Double
dim emptyRow as long
emptyRow = WorksheetFunction.CountA(Range("A:A")) + ActiveSheet.Checkboxes.count
MyLeft = Cells(emptyRow, 1).Left
MyTop = Cells(emptyRow, 1).Top
MyHeight = Cells(emptyRow, 1).Height
MyWidth = MyHeight = Cells(emptyRow, 1).Width
If CheckBox1.Value = True Then
ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
With Selection
.Caption = ""
End With
End If
End Sub
我有以下代码,但有没有办法根据点击的复选框为不同的列设置复选框?因此,如果单击复选框1,那么它将在第1列中创建一个带复选标记的复选框,如果单击复选框2,则它将在第2列中创建一个带复选标记的复选框,如果没有单击复选框,则会制作未选中的复选框。我有8个复选框 - 有没有更好的方法来做它而不是放多个if语句?
答案 0 :(得分:0)
更简单的解决方案可能是添加所有复选框,但使用.visible标志来确定是否应向用户显示它们。此外,不是为每个复选框编写代码,而是使用单个“ValidateCheckboxes”例程来覆盖所有复选框,并从每个复选框的click事件中调用它。
我已经为活动表上的所有复选框汇总了一些代码。只需按升序将它们添加到屏幕上,此代码应隐藏除最后一个空的复选框之外的所有内容。
Sub ValidateCheckBoxes()
Dim i As Integer
Dim j As Integer
With ActiveSheet
For i = 1 To .CheckBoxes.Count - 1
Debug.Print .CheckBoxes(i).Caption
Debug.Print .CheckBoxes(i).Value
If .CheckBoxes(i).Value <> 1 Then
.CheckBoxes(i + 1).Visible = False
Else
If .CheckBoxes(i).Visible = False Then
.CheckBoxes(i + 1).Visible = False
Else
If Not .CheckBoxes(i + 1).Visible = True Then
'show the next checkbox
.CheckBoxes(i + 1).Visible = True
'set its value to false
.CheckBoxes(i + 1).Value = -4146
'hide all the remaining check boxes
For j = i + 2 To .CheckBoxes.Count
.CheckBoxes(j).Visible = False
Next j
Exit For
End If
End If
End If
Next i
End With
End Sub