Vba 清除筛选器错误的函数-ShowAllData失败
下午好 我编写了一个函数,该函数传递了一组工作表,并且应该清除每个工作表上的所有过滤器。以下是函数:Vba 清除筛选器错误的函数-ShowAllData失败,vba,excel,Vba,Excel,下午好 我编写了一个函数,该函数传递了一组工作表,并且应该清除每个工作表上的所有过滤器。以下是函数: Function Clearwsfilters(sheets() As Object) For i = LBound(sheets) To UBound(sheets) With sheets(i) If .AutoFilterMode Then If .FilterMode Then
Function Clearwsfilters(sheets() As Object)
For i = LBound(sheets) To UBound(sheets)
With sheets(i)
If .AutoFilterMode Then
If .FilterMode Then
Debug.Print "Clearing Filters on Sheet: "; i
------> .ShowAllData
End If
ElseIf .FilterMode Then
Debug.Print "Clearing Filters on Sheet: "; i
.ShowAllData
End If
End With
Next i
End Function
当我运行它时,它会卡在我用箭头指示的线路上。此函数将被传递到存储在对象数组中的6个同名工作表。如有必要,我可以提供有关此阵列的更多详细信息
感谢您查看此可能因为没有应用过滤器而中断,如果在
之前的下一次
错误恢复中设置,会发生什么情况?另外,为什么在If
和Else If
中执行相同的操作?我认为您不需要检查是否有筛选器,只要清除是否有筛选器,如果没有,就跳过它。如果工作表有自动筛选器但没有应用筛选器,它将成功退出循环。已应用筛选器的工作表上的函数失败。根据我看过的另一个论坛,电子表格上的高级过滤器将.FilterMode设置为True,而.AutoFilterMode仍然为False。Else If语句就是为了捕捉这个问题。我将此问题作为一个单独的问题发布,因为我认为错误可能来自将一组工作表传递到此函数,而不是仅操作一张工作表。而不是使用Worksheet.ShowAllData
使用Worksheet.AutoFilter.ShowAllData
(史蒂文·马丁的回答)。