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

问题描述 投票:0回答:1

我一直在尝试加快此代码的速度,因为它目前需要约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
excel vba
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.