Проблема с миганием экрана Excel VBA при запуске макроса - PullRequest
0 голосов
/ 08 ноября 2018

В моем Excel очень длинный VBA-код для выполнения множества процессов перед экспортом каждого листа в PDF.Во время работы я использую:

   Application.ScreenUpdating = False
   Application.ScreenUpdating = True

Проблема в том, что это не помогает, и мой экран все равно обновляется или, по крайней мере, мигает иногда черным, а иногда белым.Я думаю, что, возможно, команда .Select вызывает эту проблему?Вот одна часть моего кода:

ActiveWorkbook.Sheets("MAIN").Select

For Each cel In Range("AX7:AX120")
If cel.Value = 1 Then
cel.Offset(0, -43).Font.Bold = True
cel.Offset(0, -44).Font.Bold = True
cel.Offset(0, -45).Font.Bold = True
cel.Offset(0, -46).Font.Bold = True
 End If
Next

lastRow = [LOOKUP(2,1/(D1:D65536<>""),ROW(D1:D65536))]

Sheets("MAIN").PageSetup.PrintArea = Sheets("MAIN").Range("A1:Z" & lastRow).Address

---------------------- РЕДАКТИРОВАТЬ ---------------------------

Я внес изменения, но это не работает:

   Dim printareaMain As Worksheet
   Set printareaMain = Sheets("MAIN")

        For Each cel In printareaMain.Range("AX7:AX120")
        If cel.Value < 3 Then
        cel.Offset(0, -43).Font.Bold = True
        cel.Offset(0, -44).Font.Bold = True
        cel.Offset(0, -45).Font.Bold = True
        cel.Offset(0, -46).Font.Bold = True
         End If
        Next

        'lastRow = [LOOKUP(2,1/(D1:D65536<>""),ROW(D1:D65536))]

        printareaMain.PageSetup.PrintArea = printareaMain.Range("A1:Z" & [LOOKUP(2,1/(D1:D65536<>""),ROW(D1:D65536))]).Address

Следующая часть кода делаетничего:

    printareaMain.PageSetup.PrintArea = printareaMain.Range("A1:Z" & [LOOKUP(2,1/(D1:D65536<>""),ROW(D1:D65536))]).Address

1 Ответ

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

Я думаю, что ваш код, вероятно, выполняет много "пользовательских" действий - действий, которые имитируют действия пользователя. Комментарии верны - такие вещи, как Activate и Select эмулируют активацию и выбор пользователя . Даже установка printArea является действием пользователя и может изменить то, что видит пользователь.

К сожалению, есть много вещей, которые могут это сделать. И если ваш код делает Excel не отвечает, это также может быть фактором! Таким образом, короткий ответ, скорее всего, «зависит от остальной части вашего кода», как отмечается в одном из комментариев.

Однако есть и другие вещи, которые вы можете сделать. Вы можете попробовать сказать Excel не пересчитывать, пока выполняется макрос:

Application.Calculation = xlCalculationManual

Просто не забудьте сбросить его после завершения работы макроса.

...