Vba做為提高Excel工作效率的一種重要方法,被廣大的Excel Fans們廣泛使用。但Vba作為一種腳本語(yǔ)言,其執(zhí)行效率不會(huì)有想象的那么飛速,特別是編寫(xiě)一些比較復(fù)雜的代碼時(shí),但我們可以對(duì)我們編寫(xiě)的代碼進(jìn)行優(yōu)化,以便于最大限度的提高代碼的運(yùn)行效率。
1、使用Excel原有的函數(shù)來(lái)進(jìn)行計(jì)算
假如您采用循環(huán)的方式進(jìn)行平均數(shù)的求解
代碼如下 | 復(fù)制代碼 |
For Each c In Range(″A1:A1000″) TotalValue = TotalValue + c.Value Next AverageValue = TotalValue /Range(″A1:A1000″).Rows.Count
|
那么上述代碼的執(zhí)行效率,將比下面的代碼低的多
代碼如下 | 復(fù)制代碼 |
AverageValue=Application.WorksheetFunction.Average(Range(″A1:A1000″))
|
希望同學(xué)們舉一反三,能采用Excel自帶函數(shù)、屬性解決的問(wèn)題,盡量不要自行擴(kuò)展代碼解決。
2、盡量減少使用對(duì)象引用,尤其在循環(huán)中
每一個(gè)Excel對(duì)象的屬性、方法的調(diào)用都需要通過(guò)OLE接口的一個(gè)或多個(gè)調(diào)用,這些OLE調(diào)用都是需要時(shí)間的,減少使用對(duì)象引用能加快VBA代碼的運(yùn)行。例如
1.使用With語(yǔ)句
代碼如下 | 復(fù)制代碼 |
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″ Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
|
則以下語(yǔ)句比上面的快
代碼如下 | 復(fù)制代碼 |
With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font .Name = ″Pay″ .FontStyle = ″Bold″ ... End With
|
(在With內(nèi)部執(zhí)行時(shí),VB將在內(nèi)存中維護(hù)一個(gè)臨時(shí)對(duì)象,既如下面方法中一樣相當(dāng)于使用了一個(gè)臨時(shí)變量,只是該臨時(shí)變量是由系統(tǒng)定義系統(tǒng)命名的變量)
2.使用對(duì)象變量
如果你發(fā)現(xiàn)一個(gè)對(duì)象引用被多次使用,則你可以將此對(duì)象用Set 設(shè)置為對(duì)象變量,以減少對(duì)對(duì)象的訪問(wèn)。如:
代碼如下 | 復(fù)制代碼 |
Workbooks(1).Sheets(1).Range(″A1″).Value = 100 Workbooks(1).Sheets(1).Range(″A2″).Value = 200
|
則以下代碼比上面的要快:
代碼如下 | 復(fù)制代碼 |
Set MySheet = Workbooks(1).Sheets(1) MySheet.Range(″A1″).Value = 100 MySheet.Range(″A2″).Value = 200
|
3.在循環(huán)中要盡量減少對(duì)象的訪問(wèn)
代碼如下 | 復(fù)制代碼 |
For k = 1 To 1000 Sheets(″Sheet1″).Select Cells(k,1).Value = Cells(1,1).Value Next k
|
則以下代碼比上面的要快:
代碼如下 | 復(fù)制代碼 |
Set TheValue = Cells(1,1).Value Sheets(″Sheet1″).Select For k = 1 To 1000 Cells(k,1).Value = TheValue Next k
|
3、減少對(duì)象的激活和選擇
代碼如下 | 復(fù)制代碼 |
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、關(guān)閉屏幕更新
這應(yīng)該是大多數(shù)使用Vba的童鞋都知道的方法,也是最有效的方法,但需要注意一點(diǎn),就是關(guān)閉屏幕刷新后一定要記得,代碼運(yùn)行完畢后重新打開(kāi),特別是運(yùn)行出錯(cuò)的時(shí)候要有正確的錯(cuò)誤處理,來(lái)保障屏幕刷新可以重新被打開(kāi):
代碼如下 | 復(fù)制代碼 |
Application.ScreenUpdate = False '關(guān)閉屏幕刷新 On Error Goto ErrLab ErrLab: Application.ScreenUpdate = True
|
'打開(kāi)屏幕刷新