我有一个非常简单的VBA代码在工作簿A中运行,而在打开另一个特定的工作簿B时,这相当慢。我无权访问工作簿B内的任何宏,因此我不确定那里是否发生了任何奇怪的事情。
我环顾四周,并附带了这些最小的代码,这些代码浓缩了我在stackoverflow和许多Excel特定站点中找到的典型解决方案,但是运行仍然需要很长时间。
' Code in workbook A
Sub slow_simple_macro()
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
.DisplayStatusBar = False
End with
Workbooks("workbookA.xlsm").Sheets("Sheet1").Range("A1") = "Slow" ' This line takes about half a second to run when workbook B is open
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
.DisplayStatusBar = True
End with
End Sub
我猜测禁用事件不足以阻止工作簿B中的某些内容运行。我是否可以设置其他应用程序标志以使其运行更快?还有其他想法吗?
答案 0 :(得分:0)
在禁用诸如计算模式,屏幕更新,状态栏之类的excel功能时,您会看到,这会影响Excel的应用,因为“ Excel是对象模型之一,它是VBA中使用的所有对象的较大层次结构”来源:www.globaliconnect.com)。
因此,如果要通过关闭应用程序功能运行,则应等到重新设置为原始状态,否则会发生同样的问题。
除非需要,否则最好简化代码
Sub slow_simple_macro()
Workbooks("workbookA.xlsm").Sheets("Sheet1").Range("A1") = "Slow"
End Sub
希望您发现它很有帮助。祝你有美好的一天。