现在我正在编写一个稍微复杂的Excel工作簿网络,几乎完全由VBA自动化驱动,因此有很多宏被编写。
我尝试尽可能禁用屏幕更新,警报和事件。为了节省一些时间和头痛来追踪我可能启用/禁用它们的位置,我编写了一个子程序,其中每个的所需设置作为参数传递,因此您可以在一行中设置要启用/禁用的内容代码(或者至少是这个想法)。
这是子程序的样子:
Sub AppToggles(Optional ScrUpdating As Boolean = False, _
Optional DispAlerts As Boolean = True, _
Optional Events As Boolean = False)
With Application
.ScreenUpdating = ScrUpdating
.DisplayAlerts = DispAlerts
.EnableEvents = Events
End With
End Sub
我使用Call AppToggles(True, True, True)
(或任何需要的组合)从同一模块中的各种其他子例程调用它。
问题是,子程序似乎没有做任何事情。这是一个如此简单的例程,踩过它告诉我一切。将鼠标悬停在关键字上会显示每个开关都没有设置为传递的参数。
我可以为每个人设置一个If语句,但我很好奇我从哪里掉了下来:P
答案 0 :(得分:3)
不要单步执行代码...正常运行或通过F5运行
你的日常工作对我来说很好。
Sub TestMe()
Call AppToggles(False, False, False)
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _
"EnableEvents: " & Application.EnableEvents
Call AppToggles(True, True, True)
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _
"EnableEvents: " & Application.EnableEvents
Call AppToggles(True, True, True)
End Sub
答案 1 :(得分:0)
既然你说过一切都是自动化的,那你有没有机会禁用Application.EnableEvents
?我知道有时将其设置为False
以防止在保存工作簿时启动BeforeSave
。
如果是这种情况,请在操作True
和ScreenUpdating
之前将其设置为DisplayAlerts
。在完成所有设置后,您可以根据需要恢复为False
(或Events
参数提供的值)。