VBA 编码模式:提高 VBA 性能
在本文中,我们将研究如何提高 VBA 性能。
在上一篇文章中,我们比较了 VBA Range Loop 方法并确认使用 Variant Array 的方法是最快的。
1.性能相关的VBA全局变量
这是所有变量的摘要。
检查每个变量的内容。
1.1. Application.ScreenUpdating
是一个控制屏幕是否更新的变量,默认值为True(屏幕更新)。
- 通过设置在VBA代码执行期间不刷新屏幕(文件转换、工作表转换、单元格值设置等)来提高性能
- 屏幕刷新次数多时有效
- 在代码入口处将其设置为 False,并在代码末尾将其设置回 True。
1.2. Application.DisplayAlerts
控制是否显示警告窗口的变量,默认值为True(显示警告窗口)。
- 通过在 VBA 代码执行期间不显示警告窗口(例如,在尝试关闭已更改的文件时“是否要保存”)来防止代码在中间停止
- 在代码入口处将其设置为 False,并在代码末尾将其设置回 True。
1.3.应用.计算
这是一个控制公式计算方式的变量,默认值为xlCalculationAutomatic(自动计算)。
- 防止在 VBA 代码执行期间自动计算公式(COUNTIF、VLOOKUP 等)
- 对许多配方有效
- 在代码入口处设置为xlCalculationManual,在代码末尾设置回xlCalculationAutomatic
1.4. Application.EnableEvents
是控制是否处理事件的变量,默认值为True(处理事件)。
- 阻止执行处理事件的代码,例如 Worksheet_Change 发生时
- 如果您有处理事件的代码,这将很有效。
- 在代码入口处将其设置为 False,并在代码末尾将其设置回 True。
2.示例代码
2.1.什么时候申请合适
如果 VBA 代码包含以下情况,则适合应用本文介绍的性能提升方法。
- 创建新文件/工作表时
- 将当前工作表切换到另一个工作表时
- 如果在一个工作表中连续更改当前选中的单元格
- 执行复杂计算时,例如使用许多公式进行长时间计算
在这种情况下,VBA 代码的执行会暂时停止,并处理需要 Excel 的事件,例如更新屏幕或计算公式。慢速 VBA 代码的最典型示例是屏幕刷新。您可以通过在 VBA 代码运行时暂时挂起其他事件处理,并在 VBA 代码执行完毕后处理其他事件来提高性能。
2.2.示例代码
在进入待处理代码之前,全局变量被设置为一个性能提升值,待处理代码结束后,再改为原来的值。请参考以下代码。
'코드 진입 부분 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.DisplayAlerts = False '실행할 코드가 들어 갈 부분 ... '코드 종료 부분 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.DisplayAlerts = True
上面,我们查看了用于提高性能的 VBA 编码模式。如果您有任何问题,请发表评论。