调试Excel VBA代码
生活随笔
收集整理的這篇文章主要介紹了
调试Excel VBA代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
調試Excel VBA代碼
目錄
??? 1編譯錯誤
??? 2運行中出錯或者運行結果錯誤
Excel VBA出錯時給出的錯誤信息極少,需要充分利用各種工具來進行調試。
1.編譯錯誤
常見的編譯錯誤有:
??? 錯誤的源代碼格式,比如if后面缺少then:在編輯器中該行會變成紅色。
??? 錯誤的語法結構,比如if和end if沒有對應上:代碼運行前會給出編譯錯誤提示。
??? 類型不匹配:函數輸入的參數與定義時的參數類型不同時會出現該類錯誤。
??? 變量未定義:指使用了沒有申明的變量類型(當Option Explicit時)
建議:
??? 格式規范化,嚴格縮進。VBA插件Smart Indent是一個很好的輔助工具。這樣做讓源代碼更具備可讀性,從而更快檢測源代碼格式和語法結果錯誤,。
??? 勾選上“工具——選項——編譯器——要求變量聲明”,或者在每個代碼模塊最前面手工加上 Option Explicit 。在代碼編輯中,很多錯誤只是因為手誤,這個選項會讓編譯器強制檢查變量申明,從而在編譯時便發現錯誤。
2.運行中出錯或者運行結果錯誤
當程序編譯沒有問題,但運行中出錯或者運行的結果與想象中不符,就需要用到VBA的調試功能。下面是VBA提供的幾個重要的調試功能,這些功能能讓程序停在某些特定的位置上等待檢查:
??? F9:設置程序斷點,在代碼左側欄點擊有相同效果。重新按F9即取消斷點。
??? F8:單步跟蹤,當調用子函數會跟蹤到子函數內部
??? Shift+F8:單步跟蹤,但不會進入子函數內部
??? Ctrl+Shift+F8:跳出正在跟蹤的函數,直接返回上一層函數。
??? F5:運行程序,直到出現錯誤、程序結束或程序斷點為止
??? Ctrl+F8:運行程序,直到出現錯誤、程序結束、程序斷點或當前光標所在行為止
??? debug.print var:在立即窗口中顯示var的值
??? debug.assert var:當var==false時程序自動停止
以上命令也可在菜單和命令欄中獲取。
在調試過程中,可通過下面幾種方法查看各個變量的值,當變量和預期不一樣時,也就找到了程序出錯的原因,便能對照修改:
??? 立即窗口(快捷鍵Ctrl+G):在該窗口里會顯示debut.print的結果值,以及隨時計算和運行代碼。在代碼前面添加“?”,可以在立即窗口中顯示運行結果。
??? 監視窗口:可以將變量以及表達式添加到監視窗口,可以實時查看變量和表達式的值。支持將代碼窗口里的變量和表達式拖入到見識窗口
??? 本地窗口:本地窗口里可以查看目前的local變量和global變量的變量值。
??? 編輯窗口:將鼠標停在編輯窗口的變量上可顯示該變量的值。
有一些方法可減少程序錯誤以及降低調試的難度:
??? 添加重要的代碼注釋。
??? 源代碼格式規范化,增加代碼可讀性。VBA插件Smart Indent是一個很好的輔助工具。
??? 盡可能聲明變量類型,少用Variant變量。
??? 注意函數的參數傳遞方式,默認為傳引用,子函數會修改變量的值。
??? 盡量將功能函數化,不同的功能分開寫。
??? 避免在VBA中引用絕對地址,如Range("A1")??上仍贓xcel中定義名稱"abc=$A$1",然后引用Range("abc")。
??? 避免使用ActiveSheet, ActiveWorkbook等可變變量,用Sheet1,ThisWorkbook這種絕對變量。絕對變量不受外界操作影響。
目錄
??? 1編譯錯誤
??? 2運行中出錯或者運行結果錯誤
Excel VBA出錯時給出的錯誤信息極少,需要充分利用各種工具來進行調試。
1.編譯錯誤
常見的編譯錯誤有:
??? 錯誤的源代碼格式,比如if后面缺少then:在編輯器中該行會變成紅色。
??? 錯誤的語法結構,比如if和end if沒有對應上:代碼運行前會給出編譯錯誤提示。
??? 類型不匹配:函數輸入的參數與定義時的參數類型不同時會出現該類錯誤。
??? 變量未定義:指使用了沒有申明的變量類型(當Option Explicit時)
建議:
??? 格式規范化,嚴格縮進。VBA插件Smart Indent是一個很好的輔助工具。這樣做讓源代碼更具備可讀性,從而更快檢測源代碼格式和語法結果錯誤,。
??? 勾選上“工具——選項——編譯器——要求變量聲明”,或者在每個代碼模塊最前面手工加上 Option Explicit 。在代碼編輯中,很多錯誤只是因為手誤,這個選項會讓編譯器強制檢查變量申明,從而在編譯時便發現錯誤。
2.運行中出錯或者運行結果錯誤
當程序編譯沒有問題,但運行中出錯或者運行的結果與想象中不符,就需要用到VBA的調試功能。下面是VBA提供的幾個重要的調試功能,這些功能能讓程序停在某些特定的位置上等待檢查:
??? F9:設置程序斷點,在代碼左側欄點擊有相同效果。重新按F9即取消斷點。
??? F8:單步跟蹤,當調用子函數會跟蹤到子函數內部
??? Shift+F8:單步跟蹤,但不會進入子函數內部
??? Ctrl+Shift+F8:跳出正在跟蹤的函數,直接返回上一層函數。
??? F5:運行程序,直到出現錯誤、程序結束或程序斷點為止
??? Ctrl+F8:運行程序,直到出現錯誤、程序結束、程序斷點或當前光標所在行為止
??? debug.print var:在立即窗口中顯示var的值
??? debug.assert var:當var==false時程序自動停止
以上命令也可在菜單和命令欄中獲取。
在調試過程中,可通過下面幾種方法查看各個變量的值,當變量和預期不一樣時,也就找到了程序出錯的原因,便能對照修改:
??? 立即窗口(快捷鍵Ctrl+G):在該窗口里會顯示debut.print的結果值,以及隨時計算和運行代碼。在代碼前面添加“?”,可以在立即窗口中顯示運行結果。
??? 監視窗口:可以將變量以及表達式添加到監視窗口,可以實時查看變量和表達式的值。支持將代碼窗口里的變量和表達式拖入到見識窗口
??? 本地窗口:本地窗口里可以查看目前的local變量和global變量的變量值。
??? 編輯窗口:將鼠標停在編輯窗口的變量上可顯示該變量的值。
有一些方法可減少程序錯誤以及降低調試的難度:
??? 添加重要的代碼注釋。
??? 源代碼格式規范化,增加代碼可讀性。VBA插件Smart Indent是一個很好的輔助工具。
??? 盡可能聲明變量類型,少用Variant變量。
??? 注意函數的參數傳遞方式,默認為傳引用,子函數會修改變量的值。
??? 盡量將功能函數化,不同的功能分開寫。
??? 避免在VBA中引用絕對地址,如Range("A1")??上仍贓xcel中定義名稱"abc=$A$1",然后引用Range("abc")。
??? 避免使用ActiveSheet, ActiveWorkbook等可變變量,用Sheet1,ThisWorkbook這種絕對變量。絕對變量不受外界操作影響。
總結
以上是生活随笔為你收集整理的调试Excel VBA代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 据说是Jack Wu的自定义函数!烂
- 下一篇: excel宏病毒专杀方法