将复选框添加到多个列?

时间:2014-02-02 23:35:36

标签: excel vba excel-vba userform

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语句?

1 个答案:

答案 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