我一直在尝试加快此代码的速度,因为它目前需要约22秒的时间才能运行,而且我敢肯定,与目前的水平相比,它可以比我能做到的要聪明得多。
我相信延迟是由打开其他工作簿引起的,所以只需尝试弄清楚如何使此过程更智能。
基本上,我有60个版本的电子表格(每个部门1个),使用此代码可以在每天早晨通过BisTalk生成数据表时更新数据,以便为部门提供其工资支出的最新预测。 / p>
它打开这些工作表是为了刷新文档中的数据(基本上只需要打开然后关闭这3个工作簿),因此可以从1个工作簿进行更改,并在部门开放时流经所有60个工作簿文档,然后运行更新按钮,执行以下宏。
编辑:使用下面的方法并使用计时器始终来自打开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
答案 0 :(得分:1)
一种将其大幅度提高速度的快速方法是将其他工作簿文件更改为二进制.xlsb,这将这些文件的加载时间减少到原来的三分之一。