Мерцание экрана, даже когда Application.ScreenUpdating имеет значение False - PullRequest
0 голосов
/ 07 ноября 2018

Привет, я новичок в VBA, поэтому заранее прошу прощения, если мой код выглядит плохо. Моя проблема в том, что я хотел бы остановить мерцание экрана при запуске макроса с помощью кнопки. Тем не менее, я пробовал несколько кодов, чтобы решить эту проблему, но безрезультатно. Я попытался Application.ScreenUpdating = False в начале моего сабвуфера и переключился обратно в True перед завершением сабвуфера, но экран все еще мерцает. Есть ли другое решение для этого? Заранее спасибо!

Код:

Sub UpdateData()

Application.ScreenUpdating = False
Debug.Print Application.ScreenUpdating
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False

Dim wb1 As Workbook
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim EMS As Worksheet
Dim TD As Worksheet
Dim JV1 As Worksheet

Set wb1 = ActiveWorkbook

Workbooks.Open ("HR Headcount Report 2018 Australia SEPTEMBER.XLSX")
Set wb2 = ActiveWorkbook
Set EMS = Sheets("Employee Movement Summary")
EMS.Activate
Range("J19").Copy
wb1.Activate
Range("J34").PasteSpecial xlPasteValues

wb2.Activate
Set TD = Sheets("Turnover Dashboard")
TD.Activate
Range("J44").Copy
wb1.Activate
Range("J2").PasteSpecial xlPasteValues
wb2.Activate
Range("J47").Copy
wb1.Activate
Range("J3").PasteSpecial xlPasteValues

P.S. Это первая половина моего кода. Я подозреваю, что многократное использование .Activate вызывает проблему. Если это так, как я могу переписать свой код, чтобы избежать использования .Activate?

1 Ответ

0 голосов
/ 07 ноября 2018

Приведенный ниже код поможет вам удалить все ваши заявления Activate:

Sub UpdateData()

Application.ScreenUpdating = False
Debug.Print Application.ScreenUpdating
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False

Dim wb1 As Workbook
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim EMS As Worksheet
Dim TD As Worksheet
Dim JV1 As Worksheet

Set wb1 = ThisWorkbook
Set ws1 = ActiveSheet
'better to refer to the actual sheet name rather than the Active Sheet, amend as required

Set wb2 = Workbooks.Open("HR Headcount Report 2018 Australia SEPTEMBER.XLSX")

Set EMS = wb2.Sheets("Employee Movement Summary")
EMS.Range("J19").Copy
ws1.Range("J34").PasteSpecial xlPasteValues

Set TD = wb2.Sheets("Turnover Dashboard")
TD.Range("J44").Copy
ws1.Range("J2").PasteSpecial xlPasteValues
TD.Range("J47").Copy
ws1.Range("J3").PasteSpecial xlPasteValues
...