添加复选框以使用vba清空

时间:2014-02-02 03:12:22

标签: excel excel-vba vba

我有以下代码:

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")) + 1
        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

但由于某种原因,复选框每次都不会添加到emptyrow,而是会复选框一次又一次地保存列/行...我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

因为您的位置由WorksheetFunction.CountA(Range("A:A"))设置,CountA仅计算单元格条目。因此添加复选框不会导致计数增加

调整它的一种方法是通过在添加形状时递增来调整行数

emptyRow = WorksheetFunction.CountA(Range("A:A")) + ActiveSheet.CheckBoxes.Count

其他选项是

  • 存储在单元格或范围名称中添加的Checkboxes的数量。
  • 同时将白色文本添加到空单元格(以增加CountA(Range("A:A")

答案 1 :(得分:1)

如果所有复选框都在A列中,但附加代码的除外,您可以设置空行:

 emptyRow = ActiveSheet.CheckBoxes.Count

或其中的一些变体(可能与CountA一起)取决于您是要填充每个单元格,还是仅填充不包含值的单元格。

如果你可能在工作表的其他区域有复选框,你可能需要遍历每个区域以查看它们所在的列 - 那些是.Left = 0的列;并使用你的计数。