我用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