求平均工資的例子:
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