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