The grater the amount of screen changes the bigger the impact will be. Other application settings that can make a difference to execution time are Calculation and Event handling. Enable Events = False ' Code here Clean Up: On Error Resume Next Application. Calculation = xl Calculation Automatic Application. Enable Events = True Exit Sub EH: ' Do error handling Go To Clean Up End Sub Sub test Screen Updating() Dim i As Integer Dim numb Switches As Integer Dim results As String 'swap between sheets this number of times numb Switches = 1000 'keep track of time Dim start Time As Double start Time = Time 'swap between sheets 1/2 (need both sheets or this will crash) For i = 1 To numb Switches Sheets(1 (i Mod 2)).
Use this code template as a starting point (the error handler ensures that these properties are turned back on at the end of the sub, even if it errors) Sub Your Sub() On Error Go To EH Application. Select Next i 'get results results = "Screen Updating not disabled: " & Format(Time - start Time, "hh:mm:ss") & " seconds" start Time = Time 'scenario 2 - screenupdating disabled Application.
Just one recalculation and one redraw at the end of your code execution is enough to get the workbook current with all your changes. Enable Events display Page Break State = Active Sheet. Since it requires lots of resources to draw the screen so frequently, just turn off drawing the screen until the end of your code execution.
I always assumed it was just used so that it didn't scare end users into thinking their PC was about to crash.
When I started reading more into improving the efficiency of your code I understood what it was for but how much of an effect does Turning off screen updating will only make a difference to execution time if the code interacts with Excel in a way that causes changes to the screen content.
If this sounds like you, then Public Sub Add Content To Sheet() Dim start Time As Double start Time = Timer Dim r As Excel. Range("A1: P30") Dim i As Long Dim repeat As Long Dim cell As Excel. Try this out: shrink your Excel workbook window to a smaller size and run the code again. Screen Updating = False Dim start Time As Double start Time = Timer Dim r As Excel. Range("A1: P30") Dim i As Long Dim repeat As Long Dim cell As Excel.
Range For repeat = 1 To 30 For Each cell In r cell. Value Mod 2 = 0) Then ' if i is even, color the cell white cell. Range For repeat = 1 To 30 For Each cell In r cell. Value Mod 2 = 0) Then ' if i is even, color the cell white cell.