Private Sub CommandButton2_Click()
.
.
Set ws1 = Sheet1
ws1.Activate 'I'd like to see the sheet that's why I activate it. It's not a bad practice.
ws1.Columns.Hidden = False
ws1.Rows.Hidden = False
ws1.AutoFilter.ShowAllData
.
.
我在另一个工作表中有这个CommandButton2,每当我单击时,它首先从Sheet1中清除所有过滤器,然后取消隐藏任何存在的列或行。
我尝试了许多不同的方法来解决这个问题。我对2-3或4列进行了一些过滤,然后同时隐藏了一些行和列。但不幸的是我找不到原因。
我的意思是,它取消隐藏所有隐藏的行和列,然后清除列中的所有过滤器。
有时我的代码可以运行,但不会取消隐藏隐藏的行/列,也不会清除过滤器。因此,这似乎在技术上可行,但在功能上却没有。
有时它完全不起作用,并给出了
Runtime 91 Object variable or With Block variable not set
如果在出现第一个错误后始终单击CommandButton2,并同时更改工作表并返回CommandButton2的工作表,然后再次单击该按钮,则有时可以解决问题。
我实际上有一个解决方案。问题不再存在,而不是带有以下代码的
ws1.AutoFilter.ShowAllData
。但是我想知道我第一个会错过什么?是什么原因导致ws1.AutoFilter.ShowAllData
发生错误?因为我在其他地方使用它没有任何问题。ws1.Select
If (ws1.AutoFilterMode And ws1.FilterMode) Or ws1.FilterMode Then
ws1.ShowAllData
End If
最佳答案
如果过滤器是在表(或几个表,但您需要修改代码)中设置的,如注释中所示,try this answer:
ws1.ListObjects(1).AutoFilter.ShowAllData
or this one:
ws1.ListObjects(1).ShowAutoFilter = False
ws1.ListObjects(1).ShowAutoFilter = True
请注意,如果您的工作表中有多个
ListObject
,则必须手动指定所需的-通过索引(如上所示),名称或迭代来指定。按名字:
ws1.ListObjects("Table1")
通过迭代:
For Each tbl In ws1.ListObjects
tbl.AutoFilter.ShowAllData
Next tbl
最后,如果您要多次引用
ListObject
,例如,如果您想更广泛地使用表,那么我强烈建议为其设置一个变量,如下所示:Dim tbl As ListObject
Set tbl = ws1.ListObjects(1)
tbl.AutoFilter.ShowAllData
以这种方式使用
ListObject
是very powerful。关于vba - VBA代码有时可以工作,但有时不能在表格格式的WorkSheet中的自动筛选行上使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44794801/