我原本想要一个简单的宏来删除整行。我创建了这个并很快发现它没有删除复选框。我试图即兴创建一个新宏,删除活动行中的所有复选框,然后删除该行。
不幸的是,我只能删除活动单元格中的复选框而不能删除活动行。
Sub DeleteCheckboxandRow()
Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
If cb.TopLeftCell.Address = ActiveCell.Address Then cb.Delete
Next
Rows(ActiveCell.Row).EntireRow.Delete
End Sub
是否有人能够解释如何修改上述宏以删除整个活动行中的复选框而不仅仅是活动单元格?
答案 0 :(得分:0)
Sub DeleteCheckboxandRow()
Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
If cb.TopLeftCell.Row = ActiveCell.Row Then cb.Delete
Next
ActiveCell.EntireRow.Delete
End Sub
答案 1 :(得分:0)
我对要求的理解是:
Rows
所在的CheckBoxes
。让我们首先查看Placement
或DrawingObjects
的{{1}}属性。此属性(请参阅Shape Members (Excel):
Shape.Placement Property(Excel) 返回或设置表示方式的XlPlacement值 物体附着在它下面的细胞上。
XlPlacement枚举具有以下可能的值:
名称:说明
xlFreeFloating:对象是自由浮动的。
xlMove:使用单元格移动对象。
xlMoveAndSize:使用单元格移动和调整对象。
这意味着,如果Shapes
将CheckBox
属性设置为Placement
,则当删除其上方的行时,它不会与该单元一起移动,因此{{1} }将不再是预定的行。因此,在删除任何行之前,我们需要确保所有xlFreeFloating
的{{1}}属性不是CheckBox
。
另外,由于一行可能包含多个Placement
,我们需要先创建一个包含要删除的所有行的范围,然后删除CheckBoxes
,最后删除相应的xlFreeFloating
此程序负责以上所有事项:
Sub Shp_CheckBoxAndRow_Delete() Dim ChkBox作为CheckBox Dim rRow As Range,rRowsDel As Range
CheckBox