方法一:关闭屏幕更新
关闭屏幕更新是提高VBA程序运行速度的最有效的方法
运行速度有可能提高一倍以上。
关闭屏幕更新的方法:
Application.ScreenUpdate = False
且不要忘记VBA程序运行结束时再改回来:
Application.ScreenUpdate = True
方法二:尽量使用VBA自身的属性、方法和 及Excel 自己的 Worksheet函数
尽量使用VBA自身原有的属性、方法和Worksheet函数,不要自己再写代码,再造轮子(除非是Excel自身的函数非常影响效率),您自己写的代码的运行效率显然赶不上Excel对象自身的属性、方法完成任务的速度 。 因此编程前应尽可能多地先了解Excel对象的属性、方法。
充分利用Worksheet函数是提高程序运行速度的极度有效的方法。如求数据和的例子:
如求和,计数,尽量使用Excel自带的sum count函数,而不是自己再写VBA自定义函数
方法2:在循环中尽量减少使用对象引用
每一个Excel对象的属性、方法的调用都需要通过系统接口,这些调用都是需要时间的,减少使用对象引用能加快VBA代码的运行。
可能过以下方法
1.使用对象变量
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问。如:
Workbooks(3).Sheets(1).Range(″B1″).Value = 50
Workbooks(3).Sheets(1).Range(″B2″).Value = 80
改成
Set sht=Workbooks(3).Sheets(1)
sht.Range(″B1″).Value = 50
sht.Range(″B2″).Value = 80
会快很多
2.使用With语句。
如上面也可改成
With Workbooks(3).Sheets(1)
.Range(″B1″).Value = 50
.Range(″B2″).Value = 80
End With
在With内部执行时,VB将在内存中维护一个临时对象
有点像第一种方法中一样定义了一个变量,只不过是一个系统的临时变量,是由系统定义系统命名的变量,对我们不可见
3.循环中要尽量减少对对象的多次访问,经常的值可以先赋给一个变量
For i= 1 To 10000
Cells(i,1).Value =ActiveSheet.Cells(1,1).Value
Next i
改成以下代码比上面的要快:
Set varValue = ActiveSheet.Cells(1,1).Value
For i = 1 To 10000
Cells(i,1).Value = varValue
Next i
关闭屏幕更新是提高VBA程序运行速度的最有效的方法
运行速度有可能提高一倍以上。
关闭屏幕更新的方法:
Application.ScreenUpdate = False
且不要忘记VBA程序运行结束时再改回来:
Application.ScreenUpdate = True
方法二:尽量使用VBA自身的属性、方法和 及Excel 自己的 Worksheet函数
尽量使用VBA自身原有的属性、方法和Worksheet函数,不要自己再写代码,再造轮子(除非是Excel自身的函数非常影响效率),您自己写的代码的运行效率显然赶不上Excel对象自身的属性、方法完成任务的速度 。 因此编程前应尽可能多地先了解Excel对象的属性、方法。
充分利用Worksheet函数是提高程序运行速度的极度有效的方法。如求数据和的例子:
如求和,计数,尽量使用Excel自带的sum count函数,而不是自己再写VBA自定义函数
方法2:在循环中尽量减少使用对象引用
每一个Excel对象的属性、方法的调用都需要通过系统接口,这些调用都是需要时间的,减少使用对象引用能加快VBA代码的运行。
可能过以下方法
1.使用对象变量
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问。如:
Workbooks(3).Sheets(1).Range(″B1″).Value = 50
Workbooks(3).Sheets(1).Range(″B2″).Value = 80
改成
Set sht=Workbooks(3).Sheets(1)
sht.Range(″B1″).Value = 50
sht.Range(″B2″).Value = 80
会快很多
2.使用With语句。
如上面也可改成
With Workbooks(3).Sheets(1)
.Range(″B1″).Value = 50
.Range(″B2″).Value = 80
End With
在With内部执行时,VB将在内存中维护一个临时对象
有点像第一种方法中一样定义了一个变量,只不过是一个系统的临时变量,是由系统定义系统命名的变量,对我们不可见
3.循环中要尽量减少对对象的多次访问,经常的值可以先赋给一个变量
For i= 1 To 10000
Cells(i,1).Value =ActiveSheet.Cells(1,1).Value
Next i
改成以下代码比上面的要快:
Set varValue = ActiveSheet.Cells(1,1).Value
For i = 1 To 10000
Cells(i,1).Value = varValue
Next i