xcl107
xcl107

Reputation: 13

Unable to set Application.ScreenUpdating to false

I have some VBA code as follows:

Sub copyData(fromRange as Range, toRange as Range)
 Application.ScreenUpdating = False

 <copy paste code here>

 Application.ScreenUpdating = True
End Sub

Even though I am setting Application.ScreenUpdating to False, it remains at True. I have verified this using F8 and hovering over Application.ScreenUpdating (it shows True).

My copy paste code works. It switches worksheets but since ScreenUpdating remains at True, I can see the screen flicker.

Is there a way to set Application.ScreenUpdating to False?

P.S. I saw a similar question in this forum but there was no concrete resolution to it.

Any help will be greatly appreciated!

Upvotes: 1

Views: 2703

Answers (3)

JRM
JRM

Reputation: 1

I use Excel as part of Microsoft 365. I too fought with the screen flickering problem. Although my macro worked, the flickering was very annoying. I tried several approaches and stumbled upon this:

Minimize the second workbook before initiating the macro from the first workbook. For my situation, the screen no longer flickered. I also tried the following code to minimize the second workbook from within VBA. If the second workbook was already minimized, there was no effect. If the second workbook was not minimized, the screen flickered only once - to enable me to minimize the second workbook. Subsequent switching back and forth between workbooks did not introduce any screen flickering.

Filename = "SecondWorkbookName.xlsx"

Windows(Filename).Activate

Application.WindowState = xlMinimized      ' Minimize workbook to prevent flickering.

Application.ScreenUpdating = False

Upvotes: 0

Dumitru Daniel
Dumitru Daniel

Reputation: 549

I've had the same issue for quite a while, and I figured out something: Application.screenUpdating only stays FALSE for how ever long a macro runs. When any macro running stops, it turns True. You can try this:

Sub testApplicationScreenUpdating()
    Application.ScreenUpdating = False
    Debug.Print "Application screen updating is:" & Application.ScreenUpdating
    Application.ScreenUpdating = True
End Sub
  • if you just run this, it will return in the Immediate window: "Application screen updating is:False"
  • if you run it step by step, and hover over Applicaiton.ScreenUpdating with your mouse, it will show as "True", even if the Immediate window will show "False".
  • if you comment out the [Application.ScreenUpdating = True] at the end, and then run [Debug.Print "Application screen updating is:" & Application.ScreenUpdating] separately, it will return true, even if it was not switched to true.

Upvotes: 1

Brian
Brian

Reputation: 2108

Try this code and see the values for each in the Immediate Window Ctrl+G:

Sub copyData()

Dim r As Boolean
r = Application.ScreenUpdating = False
Debug.Print "'Application.ScreenUpdating' is set to " & r

r = Application.ScreenUpdating = True
Debug.Print "'Application.ScreenUpdating' is set to " & r

End Sub

Upvotes: 0

Related Questions