Excel VBA 使用 运行 宏时屏幕闪烁问题
Excel VBA screen blinking problem while running macro
我的 Excel 中有很长的 VBA 代码到 运行 很多过程,然后再将每个 sheet 导出为 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
我认为您的代码可能会执行很多 "User" 操作 - 模拟用户操作的操作。评论是正确的 - Activate
和 Select
模拟 user 激活和选择。即使设置 printArea
也是用户操作,并且可以更改用户看到的内容。
不幸的是,有很多事情可以做到这一点。如果您的代码使 Excel 无响应,这也可能是一个促成因素!因此,简短的回答可能是 "it depends on the rest of your code",正如其中一条评论所述。
但是,您还可以做其他事情。您可以尝试告诉 Excel 在您的宏运行时不要重新计算:
Application.Calculation = xlCalculationManual
确保在宏完成后重置它 运行。
我的 Excel 中有很长的 VBA 代码到 运行 很多过程,然后再将每个 sheet 导出为 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
我认为您的代码可能会执行很多 "User" 操作 - 模拟用户操作的操作。评论是正确的 - Activate
和 Select
模拟 user 激活和选择。即使设置 printArea
也是用户操作,并且可以更改用户看到的内容。
不幸的是,有很多事情可以做到这一点。如果您的代码使 Excel 无响应,这也可能是一个促成因素!因此,简短的回答可能是 "it depends on the rest of your code",正如其中一条评论所述。
但是,您还可以做其他事情。您可以尝试告诉 Excel 在您的宏运行时不要重新计算:
Application.Calculation = xlCalculationManual
确保在宏完成后重置它 运行。