独立的子程序的应用程序的方法?
现在我正在编写一个几乎完全由VBA自动化驱动的Excel工作簿的复杂networking,所以有很多macros正在写入。
我尽可能地禁用屏幕更新,警报和事件。 为了节省一些时间和头痛追踪我可能已经启用/禁用这些,我已经写了一个子程序,其中每个所需的设置作为parameter passing,所以你可以设置你想要在一行中启用/禁用的代码(或者至less是这个想法)。
这就是子程序的样子:
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)
(或者任何需要的组合Call AppToggles(True, True, True)
从同一模块中的其他各种子程序调用它。
问题是,子程序似乎没有做任何事情。 这是一个简单的例程,通过它没有告诉我什么。 将鼠标hover在关键字上可以看出,每个开关都没有设置为传递的参数。
我可以为每个人设置一个If语句,但是我很好奇我从哪里掉下了轨道:P
不要单步执行代码…通常或通过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
既然你说过所有的东西都是自动的,那么你有没有办法禁用Application.EnableEvents
? 我知道它有时会设置为False
以防止BeforeSave
在保存工作簿时启动。
如果是这种情况,在操纵ScreenUpdating
和DisplayAlerts
之前将其设置为True
应该是ScreenUpdating
的。 如果需要,您可以在所有设置完成后恢复为False
(或者由Events
参数提供的值)。