我有一个工作簿,可以为各个客户端创建数据报告,每个客户端在工作簿中都有一个特定的工作表。原始数据存储在工作表RawData中。在每个客户特定的工作表上,原始数据是重复的,例如A129
客户端工作表对所有相关行和列说=RawData!A1
。
在每个客户端工作表中,原始数据然后由客户端名称(以下代码中的T51
)和相关月份(T52
)自动过滤。这是由每个客户端工作表上的宏(下面)维护的。每次更新单元格时都会运行宏。因此,一旦原始数据更新,它将自动流入相关的客户报告。
虽然这非常有效地仅在其报告中填写相关客户的特定数据;由于有+20个客户报告,它运行缓慢。在对原始数据或所需月份进行更改后,需要25分钟才能完成并更新所有电子表格中的所有自动过滤器。
如果有人可以提供帮助,我希望能够将代码放在一个工作表(例如RawData
表)上,然后循环遍历所有工作表并以这种方式更新自动过滤器。我的猜测是,这样做会使整个过程更快 - 通过一个代码连续运行20张而不是20个试图同时运行。
任何帮助或任何关于如何做得更好的想法将非常感激。谢谢。
Private Sub Worksheet_Calculate()
If Me.FilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With ActiveWorkbook
.CustomViews.Add ViewName:="Mine", RowColSettings:=True
Me.AutoFilterMode = False
.CustomViews("Mine").Show
.CustomViews("Mine").Delete
End With
With ActiveWorkbook
Range("$A$129:$I$33602").AutoFilter Field:=2, Criteria1:=Range("T51").Value
Range("$A$129:$I$33602").AutoFilter Field:=5, Criteria1:=Range("T52").Value
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub
更多信息:T51
和T52
由与数据透视图相关联的切片机控制。例如,更改Month切片器会更改所有客户端工作表中的所有数据透视表以及T52
,然后更新过滤器。 T51
和客户名称也是如此,尽管这只是特定于工作表的
答案 0 :(得分:-1)
循环浏览工作表:
Sub ertdfgcvb()
Dim ws As Worksheet
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
For Each ws In ActiveWorkbook.Worksheets
If ws.FilterMode = True Then
With ActiveWorkbook 'I don't know what this view does, you might need to select the sheet beforehand
.CustomViews.Add ViewName:="Mine", RowColSettings:=True
ws.AutoFilterMode = False
.CustomViews("Mine").Show
.CustomViews("Mine").Delete
End With
ws.Range("$A$129:$I$33602").AutoFilter Field:=2, Criteria1:=ws.Range("T51").Value
ws.Range("$A$129:$I$33602").AutoFilter Field:=5, Criteria1:=ws.Range("T52").Value
End If
Next ws
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub