gpt4 book ai didi

vba - ListRow.Delete 方法不适用于过滤表

转载 作者:行者123 更新时间:2023-12-02 17:31:59 27 4
gpt4 key购买 nike

我试图找出为什么 VBA ListRow.Delete当我的表被过滤和未被过滤时,该方法的工作方式似乎有所不同。

我有一个包含电子邮件地址的表,并且有一个名为 AutoCheck 的列使用一个公式来检查地址是否满足我的有效性标准。我还有一个宏(与某些按钮相关),可以删除表中具有 AutoCheck 的所有行。值为False :

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只是不做任何事情,我单步执行它,没有任何改变!

我确信我在这里遗漏了一些东西,我将不胜感激任何帮助。

最佳答案

表格中的这种行为似乎是设计使然。我不确定为什么会这样,或者允许过滤表行删除可能会产生什么后果。如果右键单击筛选的表格单元格然后转到“删除”,则您的选项是“表格列”或“整个工作表行”。

运行代码会在 tbl.ListRows(x).Range.Delete 行抛出运行时 1004:

Can't move cells

但是,考虑到上述右键单击“删除”选项,应该可以删除EntireRow:

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).Range.EntireRow.Delete
End If
Next x

End Sub

在 Excel 365 中测试并且有效!

关于vba - ListRow.Delete 方法不适用于过滤表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50604231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com