Excel 使用vba将复选框添加到emptyrow

Excel 使用vba将复选框添加到emptyrow,excel,vba,Excel,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 M

我有以下代码:

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中,而是使复选框反复保存列/行。。。如何解决此问题?

因为您的位置是由
工作表函数设置的。CountA(范围(“A:A”)
CountA
仅统计单元格条目。因此,添加复选框不会导致计数增加

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

emptyRow=WorksheetFunction.CountA(范围(“A:A”)+ActiveSheet.checkbox.Count

其他的选择是

  • 存储单元格中添加的
    复选框的数量或范围名称
  • 向空单元格中添加白色文本(以增加计数A(范围(“A:A”)

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

 emptyRow = ActiveSheet.CheckBoxes.Count
或者根据您是要填充每个单元格,还是只填充不包含值的单元格,使用CountA进行更改


如果您可能在工作表的其他区域中有复选框,您可能必须循环检查每个复选框,以查看它们在哪一列中--这些是带有.Left=0的复选框;并在计数中使用这些复选框。

复选框是覆盖工作表的对象。它不能是“in”一个单元格,因此它将永远不会使该单元格不为空,由COUNTA计数。您可以在ActiveSheet.复选框中循环查找具有最低Top属性的单元格,然后从中递增。