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


  '打开屏幕刷新


相关文章

zui-xin