2010年6月29日星期二

Excel VBA: "編譯VBAProject"用途 (Excel 1997-2010通用)

背景

某些VBAProject未經編譯時,程序仍然可以執行.
但是運行時後,出現不明的錯誤(當然是非邏輯性錯誤).
例如
"DLL 呼叫規格錯誤 (錯誤 49) sub no public"

編譯VBAProject的實際昨用

制作或更改VBA的時候,在出"偵錯"菜單出現的"編譯VBAProject",究竟有何作用?
1.匯入代碼問題
編譯VBAProject是一個經常被新手遺忘的功能. 因為大部份時間, VBA都會自動編譯.
但是,當代碼是直接匯入的時候(如mod/txt), 通常情況下"不會"自動編譯的,
如果子程序/自定函數等有重覆或缺失,
開始執行時不會出現任何提示, 當運行到子程序的位置. 就會出現錯誤信息.
所以通常在直接匯入後,應手工按一下編譯來除錯.


再者,如果匯入的是"寫死"的變數, 沒經編譯,"寫死"的變數還可能是舊的值.
 
2.快速手工除錯
當vba project存檔及關閉時, 就算代碼有錯誤,系統是"不會"提示的.
多按自動編譯(如每輸幾段入碼按一次),可以立即看到有沒有代碼出錯,
比起肉眼看代碼,偵錯來得更方便更快速.

例如,當Option Explicit開動的時候, 按一下"編譯",
就可知道有沒有變量是忘了定義的.


參考

如果想進更深層理解VBA編譯是什麼,可參考Chip Pearson的解答: ExCodes/OpCodes

沒有留言:

發佈留言