方法 1:尽量使用 VBA 原有的属性、方法和 Worksheet 函数
由于 Excel 对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能 对它们不全部了解,这就产生了编程者经常编写与 Excel 对象的属性、方法相同功能的 VBA 代码段,而这些代码段的运行效率显然与 Excel 对象的属性、方法完成任务的速度相差甚大。 例如用 Range 的属性 CurrentRegion 来返回 Range 对象,该对象代表当前区。(当前区指以 任意空白行及空白列的组合为边界的区域)。同样功能的 VBA 代码需数十行。因此编程前应 尽可能多地了解 Excel 对象的属性、方法。
充分利用 Worksheet 函数是提高程序运行速度的极度有效的方法。如求平均工资的例 子:
For Each c In Worksheet(1).Range(″A1:A1000″) TotalValue = TotalValue + c.Value Next AverageValue = TotalValue / Worksheet(1).Range(″A1:A1000″).Rows.Count
而下面代码程序比上面例子快得多:
AverageValue=Application.WorksheetFunction.Average(Worksheets(1).Range( ″ A1:A1000″))
其它函数如 Count,Counta,Countif,Match,Lookup 等等,都能代替相同功能的 VBA 程序 代码,提高程序的运行速度。
方法 2:尽量减少使用对象引用,尤其在循环中
每一个 Excel 对象的属性、方法的调用都需要通过 OLE 接口的一个或多个调用,这些
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.使用对象变量。
如果你发现一个对象引用被多次使用,则你可以将此对象用 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
方法 3: 减少对象的激活和选择
如果你的通过录制宏来学习 VBA 的,则你的 VBA 程序里一定充满了对象的激活和选择, 例如 Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select 等,但事实上大 多数情况下这些操作不是必需的。例如
Sheets(″Sheet3″).Select Range(″A1″).Value = 100 Range(″A2″).Value = 200
可改为:
With Sheets(″Sheet3″) .Range(″A1″).Value = 100 .Range(″A2″).Value = 200 End With
方法 4: 关闭屏幕更新
如果你的 VBA 程序前面三条做得比较差,则关闭屏幕更新是提高 VBA 程序运行速度的最 有效的方法,缩短运行时间 2/3 左右。关闭屏幕更新的方法:
Application.ScreenUpdate = False
请不要忘记 VBA 程序运行结束时再将该值设回来:
Application.ScreenUpdate = True
以上是提高 VBA 运行效率的比较有效的几种方法。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。