VBA 编码模式:提高 VBA 性能

在本文中,我们将研究如何提高 VBA 性能。

在上一篇文章中,我们比较了 VBA Range Loop 方法并确认使用 Variant Array 的方法是最快的。

VBA 编码模式:范围循环读取


1.性能相关的VBA全局变量

这是所有变量的摘要。

성능 관련 VBA 전역 변수
性能相关的 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 编码模式。如果您有任何问题,请发表评论。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文