应用方法的单独子程序?

时间:2014-01-09 18:51:59

标签: excel vba excel-vba

现在我正在编写一个稍微复杂的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

2 个答案:

答案 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

如果是这种情况,请在操作TrueScreenUpdating之前将其设置为DisplayAlerts。在完成所有设置后,您可以根据需要恢复为False(或Events参数提供的值)。