简化Excel VBA代码

我有一个工作簿,为每个客户创build数据报告,每个客户在工作簿中都有一个特定的工作表。 原始数据存储在工作表RawData中。 在每个客户特定的工作表上,原始数据是重复的,例如客户工作表的A129对于所有相关的行和列都表示为=RawData!A1

在每个客户端工作表中,原始数据由客户端名称(下面的代码中的T51 )和有问题的月份( T52 )自动T52 。 这由每个客户端工作表上的macros(下)来维护。 macros在每次更新单元时都会运行。 因此,一旦原始数据更新,它会自动stream入相关的客户报告。

虽然这种方法奇妙地只在报告中填入相关客户的具体数据, 由于有20个客户报告,所以运行缓慢。 对原始数据或所需月份进行更改后,需要花费25分钟时间,并更新所有电子表格中的所有自动filter。

如果有人可以协助,我希望能够把代码放在一张工作表(比如说RawData表格)上,然后循环遍历所有表格,并更新自动filter。 我的猜测是,这样做会使整个过程更快 – 通过一个代码连续运行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 

更多信息: T51T52由连接到数据透视表的切片机控制。 例如,更改“月份”切片器将更改所有客户端工作表中的所有数据透视表以及T52 ,然后更新filter。 T51和客户端名称也是如此,尽pipe这只是工作表特定的

通过工作表循环:

 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