【发布时间】:2018-11-09 06:46:26
【问题描述】:
我试图弄清楚为什么 VBA ListRow.Delete 方法在我的表被过滤和不被过滤时似乎工作方式不同。
我有一个包含电子邮件地址的表格,并有一个名为 AutoCheck 的列,其中包含一个用于检查地址是否满足我的有效性标准的公式。我还有一个宏(与一些按钮相关联),它删除表中所有在False 处具有AutoCheck 值的行:
Sub FixErrors()
Dim tbl As ListObject
Dim x As Long
Set tbl = ActiveSheet.ListObjects("Kontakty")
For x = tbl.ListRows.Count To 1 Step -1
If tbl.ListRows(x).Range.Columns(tbl.ListColumns("AutoCheck").Index) = False Then
tbl.ListRows(x).Delete
End If
Next x
End Sub
当我显示整个表格时,这就像一个魅力,但是当我应用过滤器并只显示一些条目时(不管有问题的行是否被过滤掉),宏突然停止工作!我已经尝试了一些调试并且仍然完全困惑。我在tbl.ListRows(x).Delete 的行设置了一个断点,它正确识别了违规行(tbl.ListRows(x).Range.Columns(tbl.ListColumns("Email").Index) 的手表显示了我需要删除的正确电子邮件),但tbl.ListRows(x).Delete 只是没有做任何事情,我一步通过它,什么都没有改变!
我确定我在这里遗漏了一些东西,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
这是一个错误。之前已经举报了,现在还没有回复。
-
感谢您的信息(以及非常迅速的答复)!好吧,这很糟糕,但至少现在我不必担心错过了一些明显的东西:)
标签: vba excel listobject