屏幕刷新:
如果我们不需要看见代码执行过程数据变化,可以在代码开始初关闭屏幕更新
'关闭屏幕更新
Application.ScreenUpdating = False
'恢复屏幕更新
Application.ScreenUpdating = True
自动计算
如果工作表有很多函数,在代码运行过程中,关闭公式计算可以显著提升运行速度。
'手动重算
Application.Calculation = xlCalculationManual
'计算这个工作簿
calculate
'计算当前工作表
activesheet.calculate
'自动重算
Application.Calculation = xlCalculationAutomatic
警告提示
有些时候,我们不希望代码运行过程中莫名弹出一些警告提示,可以设置False关闭提示信息。
'关闭提示
Application.DisplayAlerts = False
'恢复提示
Application.DisplayAlerts = True
关闭状态栏
Application.DisplayStatusBar 关闭状态栏。 如果将 Application.DisplayStatusBar 设置为 False,Excel 将不显示状态栏。 状态栏设置与屏幕更新设置是分开的,这样即使屏幕没有更新,也可以显示当前操作的状态。 但是,如果不需要显示每个操作的状态,在代码运行时关闭状态栏也可以提高性能。
禁用分页符
ActiveSheet.DisplayPageBreaks 禁用分页符。 如果将 ActiveSheet.DisplayPageBreaks 设置为 False,Excel 将不显示分页符。 不需要在代码运行时重新计算分页符,并且在代码执行后计算分页符可以提高性能。
事件关闭:
如果代码在运行过程中,我们不需要事件触发,可以关闭事件,避免工作簿中事件频繁触发,影响处理效率。
'关闭事件
Application.EnableEvents = False
'启动事件
Application.EnableEvents = True
读取数据时使用 .Value2
从 Excel 区域读取数据时使用 .Value2 而不是 .Value 或 .Text
.Text 返回单元格的格式化值。 速度较慢,如果用户缩放,可能返回 ###,并可能丢失精度。
.Value 在区域被格式化为日期或货币的情况下,返回 VBA 货币变量或 VBA 日期变量。 速度较慢,可能会丢失精度,并且在调用工作表函数时可能导致错误。.Value2 速度快,不会改变正在从 Excel 检索的数据。
避免选择并激活对象
选择和激活对象的处理过程比直接引用对象更为密集。 通过直接引用 Range 或 Shape 等对象,可以提高性能。
其他优化
- 通过将数组直接分配给 Range 来返回结果。
- 使用显式类型声明变量,以避免在代码执行期间确定数据类型的开销(可能在一个循环中进行多次)。
- 对于在代码中频繁使用的简单函数,请自己在 VBA 中实现这些函数而不是使用 WorksheetFunction 对象。
- 使用 Range.SpecialCells 方法缩小与代码交互的单元格数量。