我在Excel for Office 365中创建了一个宏,用于将数据从源工作簿(Source)复制到数组中,并将该数组追加到分析工作簿(Analysis)中的表的末尾。Analysis工作簿中的公式相当多,因此在进行更改时可能需要一分钟的时间来更新。
在宏的开头,我使用Application.Calculation = xlCalculationManual
来加快速度,在结尾,我使用Application.Calculation = xlCalculationAutomatic
来恢复正常。
Excel在我今天试图运行宏时挂起,它卡在显示"正在计算(4个线程):50% ",直到几分钟后我强制关闭它。它这样做了两次,经过进一步的调查--正如所料--我发现它发生在宏的最后一行:Application.Calculation = xlCalculationAutomatic
.
我注解掉了那一行,并再次运行宏,没有任何问题,然后使用F9
键计算工作表,它计算得非常快。
所以我的问题是:为什么当我在代码中使用xlCalculationAutomatic
时,如果Excel在宏运行后执行完整计算没有问题,宏会挂起?是否有解决方法?
下面是代码的最后几行:
' Paste data; copy and paste formatting
rngPaste.Value = WorksheetFunction.Transpose(arrTemp)
rngTblOldLastRow.Copy
rngPaste.PasteSpecial xlFormats
NormalMode:
Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
End Sub
1条答案
按热度按时间vjrehmav1#
条目
xlCalculationAutomatic
使Excel从对工作表进行任何更改的那一刻起计算每个单独公式的结果。例如,您有一个Excel文件,其中包含数千个公式,并且您有一个宏,该宏可以修改或添加数百个条目。当您使用
xlCalculationAutomatic
模式时,所有数千个公式将在宏正在修改或添加的数百个条目中的每一个条目处执行。Excel此时不会挂起,但可能需要很长时间才能完成任务。如果没有
xlCalculationAutomatic
,宏将暂停公式的计算,添加或修改数百个条目,并且只计算所有公式一次。因此,建议在使用宏时不要使用此模式,当然,宏使用公式结果时除外。
更专业的解释可以在here中找到。