如何提高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时遇到过运行慢的问题吗?试试这些方法,看看有没有效果,也可以分享你的优化技巧哦。


相关文章

zui-xin