我正在创建一些Excel加载项,以便为用户完成一些基本任务。我们为每个项目提供了一个电子表格供我们的用户使用。在我们处理转换为SQL数据库之前,他们使用这些电子表格对可配置项进行更改。当他们完成电子表格时,他们常常忘记取消隐藏行,列和/或删除过滤器。我想创建一个宏,可以从每个工作表中运行Unhide Rows / Columns并清除每个ListObject的过滤器。这是我试图使用的代码:
Sub RemoveFiltersUnhide()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).AutoFilterMode = False
ThisWorkbook.Worksheets(i).Rows.Hidden = False
ThisWorkbook.Worksheets(i).Columns.Hidden = False
Next i
Application.ScreenUpdating = True
End Sub
该代码适用于在每张纸上取消隐藏行/列,但它不会清除过滤器。由于每个提供的工作簿都不同,并且不包含相同的工作表或列表对象,因此我不知道如何循环遍历每个表。有人对我如何处理这个问题有任何想法吗?
工作VBA:
Sub RemoveFiltersUnhide()
Dim ws As Worksheet, lo As ListObject
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
ws.Rows.Hidden = False
ws.Columns.Hidden = False
For Each lo In ws.ListObjects
lo.AutoFilter.ShowAllData
Next
Next
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:3)
如果提供的语法here正确,则以下内容应该有效。
Dim Sheet As Excel.Worksheet, List As Excel.ListObject
For Each Sheet In ThisWorkbook.Sheets
For Each List In Sheet.ListObjects
List.AutoFilter.ShowAllData
Next
Next
答案 1 :(得分:2)
代码就是这样。
Sub RemoveFiltersUnhide()
Dim i As Long
Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
With Ws
If .FilterMode Then
.ShowAllData
End If
.Rows.Hidden = False
.Columns.Hidden = False
End With
Next Ws
Application.ScreenUpdating = True
End Sub