我在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
答案 0 :(得分:0)
我认为您的代码可能正在做很多“用户”操作-模拟用户操作的操作。注释是正确的-Activate
和Select
之类的东西模拟了 user 的激活和选择。甚至设置printArea
都是用户的一项操作,并且可以更改用户看到的内容。
不幸的是,有很多事情可以做到这一点。而且,如果您的代码使Excel无法响应,这也可能是一个促成因素!因此,简短的答案很可能是“它取决于您的代码的其余部分”,如注释之一所述。
但是,您还可以执行其他操作。您可以尝试告诉Excel在宏运行时不要重新计算:
Application.Calculation = xlCalculationManual
只需确保在宏运行完毕后将其重置。