加快此代码的速度(打开工作簿)

时间:2019-11-26 18:49:15

标签: excel vba

我一直在尝试加快此代码的速度,因为它目前需要约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

1 个答案:

答案 0 :(得分:1)

一种将其大幅度提高速度的快速方法是将其他工作簿文件更改为二进制.xlsb,这将这些文件的加载时间减少到原来的三分之一。