求平均工资的例子:
for each c in worksheet(1).range(“a1:a100”)
totalvalue=totalvalue+c.value
next
averagevalue=totalvalue/worksheet(1).range(“a1:a1000”).rows.count
而下面的代码程序比上面的例子快得多
averagevalue=application.worksheetfunction.average(worksheets(1).range(“a1:a1000”))
4:尽量减少使用对象引用,尤其在循环中
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
5:减少对象的激活和选择
如果你是通过录制宏学习VBA的,则你的程式序里一一充满了对象的激活和选择,如WORKSHEETS(XXX).ACTIVATE、Sheets(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
6:关闭屏幕更新
如果前面三条做的比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效方法,缩短运行时间2/3左右。关闭屏幕更新的方法:
Application.screenupdate=false
请不要忘记VBA程序运行结束时再将该值设回来
Application.screenupdate=true