VBA錯誤處理(十八)

2022-06-01 18:06:08 字數 2264 閱讀 7690

在(vbscript/vba)程式設計中有三種型別的錯誤:

語法錯誤(也稱為解析錯誤)發生在vbscript的解釋時間。 例如,下面一行導致語法錯誤,因為它缺少乙個右括號。

function

errorhanlding_demo()

dimx,y x = "

yiibai yiibai

"y = ucase

(xend function

執行時錯誤(也稱為異常)在執行期間發生,在解釋之後。

例如,下面的行會導致執行時錯誤,因為這裡的語法是正確的,但是在執行時它正在嘗試呼叫fnmultiply,但這是乙個不存在的函式。

function

errorhanlding_demo1()

dimx,y x = 10

y = 20

z =fnadd(x,y)

a =fnmultiply(x,y)

end function

function

fnadd(x,y)

fnadd = x +y

end function

邏輯錯誤可能是最難追查的錯誤型別。這些錯誤不是語法或執行時錯誤的結果。 相反,當您在驅動指令碼的邏輯中犯了乙個錯誤,並且沒有得到預期的結果時,就會發生這種情況。

你可能無法捕捉到這些錯誤,因為這取決於業務需求,在程式中加入什麼型別的邏輯。

例如,將乙個數字除以零,或寫入乙個進入無限迴圈的指令碼。

假設我們有乙個執行時錯誤,那麼通過顯示錯誤資訊來停止執行。作為開發人員,如果想捕獲錯誤,那麼使用error物件。

例子

在下面的例子中,err.number給出錯誤號,err.description給出錯誤描述。

err.raise 6

'raise an overflow error.

msgbox

"error #

" & cstr(err.number) & "

" &err.description

err.clear

'clear the error.

vba啟用錯誤處理例程,也可以用來禁用錯誤處理例程。沒有on error語句,發生的任何執行時錯誤都是致命的:顯示錯誤訊息,並且執行突然停止。

on

error

編號關鍵字描述1

goto line

啟用在所需的行引數中指定的行開始的錯誤處理例程。指定的行必須與on error語句在相同的過程中,否則將發生編譯時錯誤。

2goto 0

禁用當前過程中啟用的錯誤處理程式並將其重置為nothing

3goto -1

禁用當前過程中啟用的異常並將其重置為nothing

4resume next

指定發生執行時錯誤時,控制權轉到發生錯誤的語句之後的語句,並從該點繼續執行。

例子

public

subonerrordemo()

onerror

goto errorhandler '

enable error-handling routine.

dim x, y, z as

integer

x = 50

y = 0

z = x / y '

divide by zero error raises

errorhandler:

'error-handling routine.

select

case err.number '

evaluate error number.

case10'

divide by zero error

msgbox ("

you attempted to divide by zero!")

case

else

msgbox

"unknown error - error#

" & err.number & "

: " &err.description

endselect

resume

next

end sub

boost教程(十八) 錯誤處理 system

boost.system 可以由特定作業系統平台的錯誤 轉換出跨平台的錯誤 boost.exception 允許給任何異常新增額外的資訊,以便利用 catch 相應的處理程式更好的對異常作出反應。include include include include include 方法 name 和 me...

VBA基礎學習之1 12錯誤處理

在 vbscript vba 程式設計中有三種型別的錯誤 1.12.1語法錯誤 語法錯誤 也稱為解析錯誤 發生在vbscript的解釋時間。例如,下面一行導致語法錯誤,因為它缺少乙個右括號。function errorhanlding demo dim x,y x yiibai yiibai y u...

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...