如果复选框为真,则删除 vba 中的整行和复选框

If checkbox is true then delete whole row and checkbox in vba

我正在尝试创建一个宏来帮助我删除复选框为 TRUE 的所有行。到目前为止,我创建了一个删除所有行的行(其中复选框为 TRUE),但复选框仍然存在。我附上了两张照片,展示了 table 的样子以及我希望它在 运行 宏之后的样子。

Table 我想用复选框删除第 2 行和第 4 行

需要 table 在 运行 宏之后

my code

复选框(和其他对象)不是它们悬停的单元格的子项,因此您必须手动删除它们。

如果没有您的源代码,您只能猜测如何最好地实现它,但这里有一个伪代码;

'Loop through checkboxes
for each obj in ActiveWorksheet.OLEObjects
   If obj.Object.Value = True Then
        'Your code to remove the rows
        ...

        'Remove the checkbox itself
        obj.Delete
    End If
next obj

接下来您必须确保在删除行时后续的复选框向上移动。要实现这一点,请确保您 select 每个复选框的位置属性下的“移动单元格”选项。

根据我所见(和默认命名约定),您使用的是标准表单复选框(即不是 ActiveX)。
鉴于此,以下代码将执行您想要的操作。

Sub RemoveCheckedRows()
    
    Dim ctCB As CheckBox

''' Process all checkboxes in the ActiveSheet
    For Each ctCB In ActiveSheet.CheckBoxes
    
    ''' If the checkbox is checked, remove the row it's in and the checkbox itself
        If ctCB = 1 Then
            ctCB.TopLeftCell.EntireRow.Delete
            ctCB.Delete
        End If
        
    Next ctCB

End Sub

备注:

  1. 您需要确保每个复选框的左上角实际上位于其所指行的单元格内
  2. 您还需要确保复选框属性设置为“移动但不调整单元格大小”
    • 这是添加复选框时的默认状态。不过,确保无妨
  3. 您不需要 link 一个单元格到复选框值(但如果您愿意,您仍然可以)