CBR*_*F23 1 error-handling vba runtime-error runtime
我已经提供了我正在使用的实际代码.我试图处理的确切条件是strCurrentRev作为零长度字符串的参数.(例如strCurrentRev="")
如果我注释掉错误处理语句,尝试在零长度字符串上执行ASC方法会抛出Run-Time Error 5"无效的过程调用或参数".
如果我然后检查err.Number它= 5.
如果我尝试使用on error resume nextactive 运行完全相同的语句,则不会引发任何错误,例如在执行后err.number总是= 0.
如果on error resume next处于活动状态,并且您尝试从即时窗口执行ASC方法(例如,键入asc(strcurrentrev)并命中Enter),则会抛出运行时错误并将该err.number属性设置为5.
我以前从未经历过这个.为什么on error resume next激活会导致错误在正常执行中不升高???
Function NextRevLetter(strCurrentRev As String) As String
'This function returns the next revision letter given an existing revision letter.
'Declare variables
Dim lngX As Long
Dim strX As String
Dim strY As String
'First, check if we are dealing with rev A-Z or AA-ZZ
If Len(strCurrentRev) <= 1 Then
'Check that we can work with revision letter ***THIS IS WHERE I AM HAVING A PROBLEM!***
On Error Resume Next
Err.Clear
'Procedure call to flag errors with ASC method without changing any values
lngX=Asc(strCurrentRev)
lngX=0
On Error GoTo 0
If Err.Number > 0 Then
Err.Clear
If Len(strCurrentRev) < 1 Then
'No revision specified, assign first revision"
strCurrentRev = "-"
Else
MsgBox "The revision letter specified is not compliant. The next revision letter cannot be determined.", vbOKOnly, "Error: Revision does not follow rules"
'Return the existing revision (no change) and exit function
NextRevLetter = strCurrentRev
Exit Function
End If
End If
'Code continues - not important for this question...
Exit Function
Run Code Online (Sandbox Code Playgroud)
你没有使用合适的工具来完成工作.应该处理运行时错误,而不是在地毯下推送(因为这就是On Error Resume Next- 执行愉快地继续,好像什么也没发生).
您需要首先尝试避免引发该错误.是什么造成的?
lngX=Asc(strCurrentRev)
Run Code Online (Sandbox Code Playgroud)
你已经知道发生了什么:
我正在尝试处理的确切条件是strCurrentRev参数作为零长度字符串.
那么,处理这个问题的正确方法是strCurrentRev 在将Asc函数传递给函数之前验证它的长度,如果给它一个空字符串,你知道它将引发运行时错误#5!
If strCurrentRev <> vbNullString Then
'calling Asc(strCurrentRev) here will not fail!
End If
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |