我试图找出用户是否删除了B列中某些单元格中的值,然后使用worksheet_change函数删除了列X中相同行中的单元格。
当我只删除B列中的一个单元格时,IsEmpty(Target)返回true,我能够清除X列中的同一行单元格。
但是,当在列B中选择多个单元格并按删除按钮时,IsEmpty(目标)将返回False。现在这里Target是多个细胞的范围。我找不到一种方法来查找用户是否同时删除了B列中的值范围。任何帮助将非常感激。
下面的代码在删除一个单元格时起作用,但在删除一系列单元格时不起作用。
Option Base 1
由于 UTTAM
答案 0 :(得分:0)
将相关列复制到隐藏的工作表(workSheet.Visible = xlVeryHidden
)中,然后使用WorksheetFunction.CountA
比较可见工作表和“阴影”列中非空单元格的数量隐藏的工作表。如果包含内容的单元格数量减少(即内容已被删除),这将很快通知您。
如果是这样,获取观察列的.UsedRange
,找到其中的第一个空单元格,并检查阴影列中的相应单元格是否也为空。如果是,继续下一个空单元格;如果没有,您知道单元格内容已被删除,您可以删除“X列”中相应的单元格内容。
每次Worksheet_Change
事件后,您需要制作另一个“影子”副本。
答案 1 :(得分:0)
你误解了函数IsEmpty的目的。
我猜你真正想要的是不包含值的单元格(空白单元格)。以下行将为您提供包含值的单元格计数。如果它等于零,那么它们都是空白的。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub
Dim bolIsEmpty As Boolean
On Error GoTo AllAreEmpty
bolIsEmpty = Target.SpecialCells(xlCellTypeConstants).Count = 0
On Error GoTo 0
If bolIsEmpty Then
' ... your code here ...
End If
Exit Sub
AllAreEmpty:
bolIsEmpty = True
Resume Next
End Sub
然而,如果所有单元格都为空,则上面的代码行将导致错误。因此,您必须按如下方式调整代码:
{{1}}