跳轉(zhuǎn)到頁面指定位置代碼(跳轉(zhuǎn)到頁面指定位置代碼怎么設(shè)置)
處理運(yùn)行時(shí)錯(cuò)誤
可能會(huì)用到這些語句
因?yàn)閳?zhí)行過程時(shí),總會(huì)遇到一些無法預(yù)料、無法避免的運(yùn)行時(shí)錯(cuò)誤,如激活一個(gè)根本不存在的工作表,將一個(gè)空單元格設(shè)置為除數(shù),將工作表重命名為一個(gè)已經(jīng)存在的名稱等,所以無論編寫代碼時(shí)多么認(rèn)真、仔細(xì),都不能避免在執(zhí)行過程時(shí)發(fā)生錯(cuò)誤。
然而,有些運(yùn)行時(shí)錯(cuò)誤,是可以預(yù)先知道它們發(fā)生的位置的,對(duì)這種預(yù)先知道可能發(fā)生的錯(cuò)誤,可以在過程中加入一些錯(cuò)誤處理的代碼,以保證過程能正常執(zhí)行。
在VBA中,通過 On Error語句來獲取過程中運(yùn)行時(shí)錯(cuò)誤的信息,并對(duì)錯(cuò)誤進(jìn)行處理。
如果出錯(cuò),
讓過程跳轉(zhuǎn)到另一行代碼處繼續(xù)執(zhí)行
如果希望在發(fā)生運(yùn)行時(shí)錯(cuò)誤時(shí),過程能自動(dòng)跳轉(zhuǎn)到指定行的代碼處繼續(xù)執(zhí)行,可以使用代碼:
On Error GoTo Line
其中,代碼中的“Line”是替 GoTo語句設(shè)置的標(biāo)簽。這個(gè)語句告訴 VBA,當(dāng)在“On Error GoTo Line”這行代碼之后發(fā)生運(yùn)行時(shí)錯(cuò)誤時(shí),跳轉(zhuǎn)到標(biāo)簽所在行的位置繼續(xù)執(zhí)行過程,如下圖所示:
如果活動(dòng)工作簿中沒有標(biāo)簽名稱為“Excel”的工作表,那么執(zhí)行這個(gè)過程后,得到的是如圖 9 -25 所示的結(jié)果。
展開全文
圖9-25 使用On Error 語句處理過程中的運(yùn)行時(shí)錯(cuò)誤
如果出錯(cuò),
忽略出錯(cuò)行的代碼繼續(xù)執(zhí)行
On Error Resume Next是VBA中另一個(gè)處理運(yùn)行時(shí)錯(cuò)誤的語句。在執(zhí)行過程時(shí),如果On Error Resume Next之后發(fā)生運(yùn)行時(shí)錯(cuò)誤,則忽略存在運(yùn)行時(shí)錯(cuò)誤的代碼,繼續(xù)執(zhí)行之后的其他代碼。如下圖所示:
因?yàn)閂BA會(huì)忽略O(shè)n Error Resume Next之后所有存在運(yùn)行時(shí)錯(cuò)誤的代碼,所以執(zhí)行這個(gè)過程后,無論工作簿中是否存在標(biāo)簽名稱為“Excel”的工作表,VBA都不會(huì)為是否能執(zhí)行代碼 Worksheets("Excel").Select 提示錯(cuò)誤信息, Exit Sub也一定會(huì)被執(zhí)行,MsgBox函數(shù)所在的代碼行將不會(huì)得到執(zhí)行的機(jī)會(huì)。
注意:在編寫過程時(shí),因?yàn)橹挥蠴n Error語句之后發(fā)生的運(yùn)行 時(shí)錯(cuò)誤才會(huì)被捕捉到,所以應(yīng)該把On Error語句放在可能發(fā)生運(yùn)行時(shí)錯(cuò)誤的代碼之前。
停止對(duì)過程中運(yùn)行時(shí)錯(cuò)誤的處理
無論是On Error GoTo Line語句,還是On Error Resume Next語句,只要在它們之后的代碼發(fā)生運(yùn)行時(shí)錯(cuò)誤,都會(huì)按預(yù)先設(shè)置好的處理方式執(zhí)行過程??墒菆?zhí)行過程時(shí)真正發(fā)生運(yùn)行時(shí)錯(cuò)誤的代碼,有可能并不是預(yù)先估計(jì)會(huì)出錯(cuò)的那行代碼,再使用預(yù)設(shè)的方式處理錯(cuò)誤,未必就是正確的,如下圖所示:
此時(shí),如果活動(dòng)工作簿中存在標(biāo)簽名稱為“Excel”的工作表,但沒有標(biāo)簽名稱為 “ExcelHome”的工作表,執(zhí)行過程后,得到的是如圖 9 - 26 所示的結(jié)果。
圖9-26 處理過程中存在的運(yùn)行時(shí)錯(cuò)誤
很顯然,這并不是希望得到的結(jié)果。在這個(gè)過程中,通過On Error GoTo Er設(shè)置的,是當(dāng) Worksheets("Excel").Select 執(zhí)行出錯(cuò)時(shí)的處理方式,而在剛才的例子中,發(fā)生運(yùn)行時(shí)錯(cuò)誤的卻是另一行代碼。
如果不希望其他代碼出錯(cuò)時(shí),也按預(yù)設(shè)的錯(cuò)誤處理方式執(zhí)行過程,可以在希望處理運(yùn)行時(shí)錯(cuò)誤的代碼之后,停止對(duì)之后代碼中可能存在的運(yùn)行時(shí)錯(cuò)誤的處理。
要停止對(duì)運(yùn)行時(shí)錯(cuò)誤的處理,可以使用On Error GoTo 0 語句,在過程中寫入了On Error GoTo 0 后,那么無論在這行代碼之前做了怎樣的設(shè)置,之后出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤都不會(huì)再按之前的設(shè)置執(zhí)行過程,除非之后又通過On Error GoTo Line或On Error Resume Next設(shè)置了運(yùn)行時(shí)錯(cuò)誤的處理方式,如下圖所示:
如果活動(dòng)工作簿中擁有名為“Excel”的工作表,但沒有名為“ExcelHome”的工作表, 則執(zhí)行過程就會(huì)出錯(cuò),如圖 9-27 所示。
圖9-27 發(fā)生運(yùn)行時(shí)錯(cuò)誤的過程
單擊對(duì)話框中的【調(diào)試】按鈕,讓過程進(jìn)入中斷模式,可以看到過程出錯(cuò)的代碼所在行,如圖 9- 28 所示。
圖9-28 執(zhí)行過程時(shí)出錯(cuò)的代碼
如果要處理這行代碼可能發(fā)生的運(yùn)行時(shí)錯(cuò)誤,應(yīng)重新使用On Error GoTo Line或On Error Resume Next設(shè)置,如下圖所示:
這樣,執(zhí)行過程后就能得到期望的結(jié)果了,如圖 9 -29 所示。
圖9-29 處理過程中出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤
處理運(yùn)行錯(cuò)誤的小竅門,你學(xué)會(huì)了嗎?
推薦閱讀
北京大學(xué)出版社
《別怕,Excel VBA其實(shí)很簡(jiǎn)單》
京東圖書 每滿100減50
數(shù)量有限,手慢無!
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。