When Excel freezes with a frozen display or unresponsive grid after running a macro, the cause is usually an unhandled runtime error that interrupted your code before it could restore Application.ScreenUpdating and Application.Calculation. Because these properties apply globally to the entire Excel application rather than just the active workbook, disabling them without an error-handling exit route leaves Excel permanently unable to repaint the screen or calculate formulas automatically.
Quick Answer
Open the Immediate Window in the VBA Editor (
Ctrl + G), pasteApplication.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic: Application.EnableEvents = True, and press Enter. To prevent future freezes, enclose your macro in anOn Error GoTostructure that routes all exits through a cleanup routine that restores these settings.
The Mechanism Behind Application Property Freezes
Setting Application.ScreenUpdating = False pauses the operating system’s window paint events for Excel, suppressing visual changes while code executes. Setting Application.Calculation = xlCalculationManual suspends the dependency tree, preventing recalculation after each cell edit.
These properties boost macro performance dramatically. However, they share a critical vulnerability: they are global application states. If an error occurs midway through your loop and the macro halts, Excel does not reset these flags to default values. The workbook stays in manual calculation, formulas show stale values, and the grid stops rendering edits.
Macro starts ──> ScreenUpdating = False ──> Runtime Error occurs
│
▼
Macro halts abruptly
│
▼
Excel left in persistent frozen UI & manual calc state
First-Line Fix: The Immediate Recovery Command
If Excel is currently unresponsive or refusing to update after a macro crash:
- Press
Alt + F11to open the Visual Basic Editor. - If the Immediate Window is not visible at the bottom, press
Ctrl + G. - Type or paste the following line:
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic: Application.EnableEvents = True: Application.StatusBar = False - Press Enter.
- Switch back to Excel (
Alt + F11). The application will recalculate and repaint immediately.
If you frequently run unfinished macros, keep an accessible utility module by Building a “Reset” macro to fix Excel settings after a crash (Calculation, ScreenUpdating).
Prevention: Structural Error Handling
To make macros resilient against crashes, route all exits—both successful runs and unanticipated errors—through a unified cleanup block.
Public Sub ProcessLargeDataset()
On Error GoTo CleanExit
' 1. Capture original calculation mode
Dim originalCalc As XlCalculation
originalCalc = Application.Calculation
' 2. Suppress application overhead
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' ---------------------------------------------
' Main Work: Place processing code here
' ---------------------------------------------
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
ws.Range("A1").Value = "Completed"
CleanExit:
' 3. Guaranteed restoration
Application.ScreenUpdating = True
Application.Calculation = originalCalc
Application.EnableEvents = True
' 4. Surface runtime errors if one occurred
If Err.Number <> 0 Then
MsgBox "Macro encountered an error: " & Err.Description, vbCritical, "Execution Error"
Err.Clear
End If
End Sub
By caching the user’s starting calculation state (originalCalc), you avoid forcing automatic calculation on workbooks that were intentionally configured for manual calculation. For broader project-level monitoring, review Building a Global Error Handler: The Err.Number and Err.Description guide.
What to Check If Excel Still Freezes
If Excel hangs while running code even with ScreenUpdating = False, the problem is not a simple property state issue. It indicates an active execution stall.
Check 1: Event Recursion Loops
If your code modifies cell values without setting Application.EnableEvents = False, each cell write triggers worksheet change events. If a Worksheet_Change event modifies another cell, it re-triggers itself in an infinite loop that locks the user interface.
- The Diagnostic: Check if your code edits cells while worksheet events are active. See Events Debugging: Why EnableEvents = False is necessary to prevent infinite loops.
Check 2: Unmanaged Memory or Object Leaks
Massive row-by-row loops that allocate COM objects or manipulate thousands of cell formatting attributes can trigger memory resource exhaustion before completion.
- The Diagnostic: Press
Ctrl + Break(orEsc) to interrupt the macro. If the code halted inside a heavyFor...Nextblock, check Troubleshooting “Out of Resources” during massive VBA loops.
Check 3: Large Dataset Performance Bottlenecks
Disabling screen updating helps render times, but it does not speed up slow operations like repeated .Select, .Activate, or cross-sheet range references. If the freeze takes minutes on large sheets but seconds on test sheets, read Performance Tuning: Why specific lines of code trigger errors on large datasets but not small ones.
Understanding the Risks of Uncontrolled Error Suppression
Never use On Error Resume Next across your entire procedure simply to bypass freezes. Bypassing errors hides broken ranges and corrupted formulas, allowing bad data into your workbook without notice. Instead, isolate On Error Resume Next strictly around lines expected to fail harmlessly, and pair it immediately with On Error GoTo 0. Review Using On Error Resume Next vs. On Error GoTo 0 (The right way) to prevent silent calculation corruption.