ExcelVBA如何提高代码效率?怎样减少对象引用?
咱先来说说啊,在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 VBA代码效率的办法,就是尽量别老引用对象,尤其是在循环里面
为啥这么说呢?因为在Excel里,调用每个对象的属性或者方法,都得通过OLE接口,而这个过程是挺费时间的。所以啊,少引用对象就能让代码跑得更快。给大家举个例子
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
(在With语句内部执行的时候,VB会在内存里维护一个临时对象,就跟下面这种用临时变量的方法差不多,只不过这个临时变量是系统自己定义和命名的)
2. 用对象变量也能提高效率
要是你发现有个对象引用被多次使用,那你就可以把这个对象用Set设置成对象变量,这样就能减少对对象的访问。就像这样
有这样的代码
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
还有一个提高Excel VBA代码效率的小窍门,就是减少对象的激活和选择
比如说有这样的代码
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
'打开屏幕刷新