Right now I’m in the middle of writing a mildly complicated network of Excel workbooks that is almost entirely driven by VBA automation, so there are lots of macros being written.
I try and disable screenupdating, alerts, and events wherever possible. To save some time and headaches in tracking down where I may have enabled/disabled these, I’ve written a subroutine where the desired settings for each are passed in as arguments, so you can set up what you want enabled/disabled in one line of code (or at least that’s the idea anyway).
This is what that subroutine looks like:
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
I call it from various other subroutines in the same module with
Call AppToggles(True, True, True) (or whatever combination is desired.
Problem is, the subroutine doesn’t seem to do anything. It’s such a simple routine that stepping through it tells me nothing. Hovering over the keywords shows me that each switch is not being set to the arguments passed.
I could set up an If statement for each one I suppose, but I’m curious as to where I fell off the tracks 😛
Don’t Step through the code… Run it normally or by F5
Your routine works fine for me.
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
Since you stated that everything is automated, did you, by any chance, disable
Application.EnableEvents? I know it’s sometimes set to
False to prevent
BeforeSave from launching when saving the workbook.
If that’s the case, setting it to
True just before manipulating
DisplayAlerts should do the trick. You can revert back to
False (or to the value provided by the
Events parameter), if needed, after everything is set.