如何提高Excel中VBA的运行速度,VBA运行速度优化方法
还在为Excel中VBA运行速度慢发愁吗?今天就来分享几个能有效提高速度的例子,手把手教你优化代码。
使用Excel自带函数计算
要是用循环方式求平均数,像下面这样写代码:
复制代码
For Each c In Range('A1:A1000')
TotalValue = TotalValue + c.Value
Next
AverageValue = TotalValue / Range('A1:A1000').Rows.Count
其实这代码执行效率比直接用Excel函数低很多,换成下面这样就快多了:
复制代码
AverageValue = Application.WorksheetFunction.Average(Range('A1:A1000'))
所以能不用自己写代码,就尽量用Excel自带的函数和属性哦。
减少对象引用,尤其在循环里
每个Excel对象的属性和方法调用都得通过OLE接口,这可是很耗时的,减少对象引用能让VBA跑得更快。
1.用With语句
像这样写代码:
复制代码
Workbooks(1).Sheets(1).Range('A1:A1000').Font.Name = 'Pay'
Workbooks(1).Sheets(1).Range('A1:A1000').Font.FontStyle = 'Bold' ...
就不如下面的写法快:
复制代码
With Workbooks(1).Sheets(1).Range('A1:A1000').Font
.Name = 'Pay'
.FontStyle = 'Bold'
...
End With
2.用对象变量
要是一个对象引用总被用,就可以把它设为对象变量,比如:
复制代码
Workbooks(1).Sheets(1).Range('A1').Value = 100
Workbooks(1).Sheets(1).Range('A2').Value = 200
改成下面这样就更快:
复制代码
Set MySheet = Workbooks(1).Sheets(1)
MySheet.Range('A1').Value = 100
MySheet.Range('A2').Value = 200
3.循环中减少对象访问
像这样的代码:
复制代码
For k = 1 To 1000
Sheets('Sheet1').Select
Cells(k, 1).Value = Cells(1, 1).Value
Next k
优化后是这样的:
复制代码
Set TheValue = Cells(1, 1).Value
Sheets('Sheet1').Select
For k = 1 To 1000
Cells(k, 1).Value = TheValue
Next k
减少对象激活和选择
比如这样的代码:
复制代码
Sheets('Sheet3').Select
Range('A1').Value = 100
Range('A2').Value = 200
可以改成:
With Sheets('Sheet3')
.Range('A1').Value = 100
.Range('A2').Value = 200
End With
关闭屏幕更新
这招很多用VBA的人都知道,也很有效,但关了屏幕刷新后,代码跑完一定要记得打开,出错时也要有错误处理来保证能重新打开,像这样:
复制代码
Application.ScreenUpdate = False
'关闭屏幕刷新
On Error Goto ErrLab
ErrLab:
Application.ScreenUpdate = True
'打开屏幕刷新
其实除了这些,还有像将数据存入数组处理、减少工作表间切换等方法也能提高VBA运行速度,大家可以自己去试试。
你平时用VBA时遇到过运行慢的问题吗?试试这些方法,看看有没有效果,也可以分享你的优化技巧哦。