独立的子程序的应用程序的方法?

现在我正在编写一个几乎完全由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在保存工作簿时启动。

如果是这种情况,在操纵ScreenUpdatingDisplayAlerts之前将其设置为True应该是ScreenUpdating的。 如果需要,您可以在所有设置完成后恢复为False (或者由Events参数提供的值)。