我一直在尝试加快此代码的速度,因为它目前需要约22秒的时间才能运行,而且我敢肯定,与目前的能力水平相比,它可以比我能做到的要聪明得多。
我相信延迟是由于打开其他工作簿而引起的,所以只需设法弄清楚如何使此过程更智能。
[基本上,我有60个版本的电子表格(每个部门1个),使用此代码在每天早上通过BisTalk生成数据表时更新数据,以便为部门提供其工资支出的最新预测。
它打开这些工作表是为了刷新文档中的数据(基本上只需要打开然后关闭这3个工作簿),因此可以在1个工作簿中进行更改,并在部门打开该工作簿时流经所有60个工作簿。 doc并运行更新按钮,执行以下宏。
编辑:使用下面的方法并始终使用计时器都是通过打开wb3(6.8s)和wb5(5.8s)来实现的。因此,如果我能以某种方式加快处理速度,将会产生巨大的影响,宏的其余部分将需要3.25秒来处理。
Public CalcState As Long
Public EventState As Boolean
Public PageBreakState As Boolean
Sub OptimizeCode_Begin()
Application.ScreenUpdating = False
EventState = Application.EnableEvents
Application.EnableEvents = False
CalcState = Application.Calculation
Application.Calculation = xlCalculationManual
PageBreakState = ActiveSheet.DisplayPageBreaks
ActiveSheet.DisplayPageBreaks = False
End Sub
Sub OptimizeCode_End()
ActiveSheet.DisplayPageBreaks = PageBreakState
Application.Calculation = CalcState
Application.EnableEvents = EventState
Application.ScreenUpdating = True
End Sub
Sub UpdateForecaster()
' UpdateForecaster
' *************************************
' Blocking the ability to pause macro due to sensitive information
Application.EnableCancelKey = xlDisabled
'Optimize Code
Call OptimizeCode_Begin
Dim Main As Workbook
Set Main = ActiveWorkbook
Dim wb2 As Workbook
Dim wb3 As Workbook
Dim wb4 As Workbook
Dim wb5 As Workbook
'Opening Data Sheets
Set wb2 = Workbooks.Open("Sheet with the workbook paths, so can easily be updated within rather than updating the code on the 60 versions of this document for each store", ReadOnly:=True)
Dim directory1 As String
Dim directory2 As String
directory1 = Worksheets("Sheet1").Range("A2").Value
directory2 = Worksheets("Sheet1").Range("A4").Value
Set wb3 = Workbooks.Open(directory1, ReadOnly:=True, Password:="password")
Set wb4 = Workbooks.Open(directory2, ReadOnly:=True)
Set wb5 = Workbooks.Open(Filename:= _
"datasheet", ReadOnly:=True, Password:="password")
wb5.Close
Main.Activate
'Refreshing Cell Information
Range("D4").Formula = "=d97"
Range("D5").Formula = "=d98"
Range("D6").Formula = "=d99"
Range("D7").Formula = "=d100"
Range("D10").Formula = "=d103"
Range("D11").Formula = "=d104"
Range("D12").Formula = "=d105"
Range("D13").Formula = "=d106"
('Same as above across other columns to refresh')
' Close Workbooks
wb3.Close False
wb4.Close False
wb2.Close False
'Optimize Code
Call OptimizeCode_End
End Sub
似乎有一种不错的方法来加快速度,这是将其他工作簿文件更改为二进制.xlsb,这将这些文件的加载时间减少到原来的三分之一。