充分利用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运行效率的比较有效的几种方法。
<[dvnews_page=(7):如何在excel里使用定时器]
用过 excel 里的加载宏 \定时保存\吗?可惜它的源程序
是加密的,现在就上传一篇介绍实现它的文档。
在 office 里有个方法是 application.ontime ,具体函数如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) 如果想进一步了解,请参阅 excel 的帮助。
这个函数是用来安排一个过程在将来的特定时间运行,(可为某个日期的指定时间,也可为指定的时间段之后)。通过这个函数我们就可以在 excel 里编写自己的定时程序了。下面就举两个例子来说明它。
1.在下午 17:00:00 的时候显示一个对话框。 Sub Run_it()
Application.OnTime TimeValue(\ ’设置定时器在 17:00:00 激活,激活后运行 Show_my_msg 。 End Sub
Sub Show_my_msg()
msg = MsgBox(\现在是 17:00:00 !\自定义信息\ End Sub
2.模仿 excel 97 里的 \自动保存宏\在这里定时 5 秒出现一次