excel - 运行宏时Excel VBA屏幕闪烁问题
问题描述
在将每张工作表导出为 PDF 之前,我的 Excel 中有很长的 VBA 代码来运行很多进程。在运行它时,我使用:
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
解决方案
我认为您的代码很可能正在做很多“用户”的事情——模拟用户操作的操作。评论是正确的——比如模拟用户激活和选择Activate
。即使设置也是用户操作,并且可以更改用户看到的内容。Select
printArea
不幸的是,有很多事情可以做到这一点。如果您的代码使 Excel 无响应,这也可能是一个促成因素!因此,正如其中一条评论所述,简短的回答很可能是“这取决于您的代码的其余部分”。
但是,您还可以做其他事情。您可以尝试告诉 Excel 在宏运行时不要重新计算:
Application.Calculation = xlCalculationManual
只需确保在宏运行完成后重置它即可。
推荐阅读
- blazor - 如何在 Blazor 页面模型部分声明中使用不同的基类?
- c - 首先读取和存储 MSB
- reactjs - 在递归中使用 setTimeout 时 setState 变慢
- c# - 如何使用包含点 (.) 的字符串路由参数在客户端 blazor 中路由?
- java - 如何使用 Mockito 模拟带有 json 数据的 POST 请求
- javascript - 如何在输入键按下时启动/停止选取框?
- node.js - 如何在 node-postgres 中捕获 client.connect()?
- python - Pymongo arayfilters 不起作用
- python - 使用 alexnet 和 flow from directory 训练灰度数据集
- machine-learning - 如何为我的全连接神经网络找到合适的架构?