Vba做為提高Excel工作效率的一種重要方法,被廣大的Excel Fans們廣泛使用。但Vba作為一種腳本語言,其執行效率不會有想象的那么飛速,特別是編寫一些比較復雜的代碼時,但我們可以對我們編寫的代碼進行優化,以便于最大限度的提高代碼的運行效率。
1、使用Excel原有的函數來進行計算
假如您采用循環的方式進行平均數的求解
代碼如下 | 復制代碼 |
For Each c In Range(″A1:A1000″) TotalValue = TotalValue + c.Value Next AverageValue = TotalValue /Range(″A1:A1000″).Rows.Count
|
那么上述代碼的執行效率,將比下面的代碼低的多
代碼如下 | 復制代碼 |
AverageValue=Application.WorksheetFunction.Average(Range(″A1:A1000″))
|
希望同學們舉一反三,能采用Excel自帶函數、屬性解決的問題,盡量不要自行擴展代碼解決。
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
|
(在With內部執行時,VB將在內存中維護一個臨時對象,既如下面方法中一樣相當于使用了一個臨時變量,只是該臨時變量是由系統定義系統命名的變量)
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、減少對象的激活和選擇
代碼如下 | 復制代碼 |
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的童鞋都知道的方法,也是最有效的方法,但需要注意一點,就是關閉屏幕刷新后一定要記得,代碼運行完畢后重新打開,特別是運行出錯的時候要有正確的錯誤處理,來保障屏幕刷新可以重新被打開:
代碼如下 | 復制代碼 |
Application.ScreenUpdate = False '關閉屏幕刷新 On Error Goto ErrLab ErrLab: Application.ScreenUpdate = True
|
'打開屏幕刷新