首先,不要一遍又一遍地指定所有這些屬性。除非你改變它們,否則它們不會改變。
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
For loop to go through each word pair
.Text = SrcText
.Replacement.Text = DestText
.Find.Execute Replace:=wdReplaceAll
Next
End With
最小化點
所以,如果你有興趣在性能降低點(每個點是查找),特別是在循環。
有兩種方法。一種是如果您要訪問多次,請將對象設置爲最低對象。
如(慢)
set xlapp = CreateObject("Excel.Application")
msgbox xlapp.worksheets(0).name
(更快,因爲你每次使用對象時omitt點)
set xlapp = CreateObject("Excel.Application")
set wsheet = xlapp.worksheets(0)
msgbox wsheet.name
第二種方法是使用。一次只能有一個活動。
這跳過了100個查找。
with wsheet
For x = 1 to 100
msgbox .name
Next
end with
字符串Concatination
而且不加入串一次一個字符。從VBScript程序員看到這一點。它需要50,000字節和許多分配和取消分配才能生成一個100個字符的字符串。
http://blogs.msdn.com/b/ericlippert/archive/2003/10/20/53248.aspx
讀屬性
不要重讀那些不特別是如果從過程還是後期綁定的更改屬性。把它們放入一個變量中。
對象類型
兩個概念在這裏 - 或縮小的過程中,早期或後期綁定。
exefiles連接到進程外。所有調用都通過RPC(一種網絡協議)進行編組。 Dllfiles正在處理中,函數調用直接跳轉。
早期綁定是set x = objecttype
。編寫程序時會查找函數。在執行時,程序被硬編碼以跳轉到存儲在該函數的vtable中的地址。
後期綁定設置x = createobject("objecttype")
。每個函數調用都是這樣的。 「你好對象,你有打印命令」。 「是」,它回覆「3號命令」。 「你好,請你指揮3號」。 「當然,這是結果」。
從Visual Basic概念(說明部分)
你可以讓你的Visual Basic應用程序的運行通過優化的Visual Basic解析對象引用的方式更快。與Visual Basic中控對象引用的速度可以通過影響:
無論ActiveX組件已作爲一個進程內的服務器或進程外的一個服務器。
對象引用是早期綁定還是後期綁定。通常,如果某個組件已作爲可執行文件(.exe文件)的一部分實現,則它是一個進程外服務器並在其自己的進程中運行。如果它已經作爲動態鏈接庫實現,則它是一個進程內服務器,並在與客戶端應用程序相同的進程中運行。
使用過程中的服務器的應用程序,因爲應用程序不必跨越進程邊界使用對象的屬性,方法和事件通常跑的比那些使用了進程外的服務器更快。有關進程內和進程外服務器的更多信息,請參閱「進程內和進程外服務器」。
對象引用早期綁定,如果他們使用聲明爲特定類的變量對象變量。如果對象引用使用作爲泛型Object類的變量聲明的對象變量,則它們是遲到的。使用早期綁定變量的對象引用通常比使用後期綁定變量的對象引用運行得更快。
Excel的具體
請參閱從微軟的人這個環節。這是特定的,而不是VBA。自動計算和其他計算值選項/ screenupdating等
http://blogs.office.com/2009/03/12/excel-vba-performance-coding-best-practices/
細胞和表結束字符的結束。你甚至可以在你的照片中看到它們。 – Noodles 2014-09-27 23:28:58
@Noodles感謝您指出。我很好奇爲什麼「字符」和「長度」以不同的方式計算單元格的結尾和表格字符的結尾。你有任何線索嗎?此外,這是唯一以不同方式計算的角色嗎? – null 2014-09-28 13:34:15