VBA:如何使用Calculate方法获取宏以更快地运行?

时间:2019-07-04 09:24:10

标签: excel vba

我用Calculate方法修复循环引用的宏非常慢。如何使其运行更快?

我有一个带有循环引用的Excel(2016)模型,该模型使模型每次断裂。我有一个“ fileFixer”宏,可以在文件损坏时对其进行修复,并且效果很好。但是,问题是运行时间:大约。 15秒我觉得有可能减少时间,但到目前为止还无法弄清楚该怎么做。

我不完全理解为什么我必须循环执行“计算”多次才能修复文件。更令我感到奇怪的是,如果我循环执行Calculate,我必须将其循环近2倍,而不是仅在几行代码上编写Calculate(我需要循环Calculate 400次以修复文件,但是如果我循环执行写“仅” 200行计算)。

我尝试了以下方法: 1. CalculateFull并没有太大的影响 2. CalculateFullRebuild,它需要较少的循环,但是运行时间明显更长 3.添加了一个“触发器”来查找模型再次开始工作的确切时间(通过尝试找到所需的循环次数),但这不起作用,因为Excel在宏运行时不会更新触发器单元格吗? / p>

我在这里粘贴了很长的代码(但精简版),这样您就可以看到完整的图片。但是,重点是“ == CALCULATE ==“部分(选项1和2)。

Sub fileFixer()
Option Explicit
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Calculate

Dim count, count2, i, calLoopCount As Integer

    count2 = Range("Num_of_Assets").Value '# of asset sheets. 1 sheet for 1 asset
    calLoopCount = 400 'number of times "Calculate" is looped
    i = 1

' ======================== CLEARS CELLS ========================
'Clears the cells causing the circular reference:
    Sheets("Assets=>").Select 'all asset sheets come after this "Assets=>" sheet

For count = 1 To count2
    ActiveSheet.Next.Select
        Range("I210:BT210").Select
            Selection.ClearContents
Next count

' ======================== CALCULATE ========================
'Option 1: "Calculate" x400 in a loop:
For i = 1 To calLoopCount
    Calculate
        If Not Application.CalculationState = xlDone Then
            DoEvents
        End If
    i = i + 1
Next i

'Option 2: "Calculate" x200:
    'Calculate
    'Calculate
    'Calculate
    '.
    '.
    '.
    'Calculate

' ======================== FILLS IN THE CELLS ========================
    Sheets("Assets=>").Select

For count = 1 To count2
        Range("I210").Select
            ActiveCell.FormulaR1C1 = "=R160C*R[-38]C" 'Inputs the formula
        Range("I210:BT210").Select
            Selection.FillRight
Next count

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

0 个答案:

没有答案