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