读书人

送分100分:在一个过程中可否有多个ON

发布时间: 2012-01-11 22:28:46 作者: rapoo

送分100分:在一个过程中可否有多个ON ERROR GOTO语句
问题如下:
1、在一个过程中可否有多个ON ERROR GOTO语句。
2、如果可以的话,它们的作用范围如何划分。


[解决办法]
1.这个可以有.
2.从你写ON ERROR GOTO 开始. 最好弄清楚逻辑层次再用,否则容易出问题.

[解决办法]
只有最后一个生效:

VB code
On   Error   Resume   NextOn Error GoTo err1err1:
[解决办法]
楼主测试一下就知道了。
VB code
Private Sub Command1_Click()On Error Resume NextDim s$(1)s(2) = "1"MsgBox "next"On Error GoTo err1s(2) = "1"err1:MsgBox "err1"End Sub
[解决办法]
Option Explicit
Dim a()

Private Sub Command1_Click()
On Error GoTo L1
Debug.Print 1 / 0
L1:
Debug.Print Err.Description

On Error GoTo L2
Debug.Print a(1)
L2:
Debug.Print Err.Description
End Sub

[解决办法]
1.可以有N个(N是自然数)
2.按照逻辑执行顺序,在出错语句之前最近的一个有效.

下面的代码会弹出 "e2"
(例子很BT,这样写代码会被其他人鄙视死,但是只是为了说明下问题)

VB code
Private Sub Command1_Click()Dim i As Integer, j As Integeri = 0On Error GoTo e1GoTo e2LineA:    j = 1 / i    MsgBox ("Pass")    On Error GoTo e2GoTo LineAe1:    MsgBox ("e1")    Exit Sube2:    MsgBox ("e2")    Exit SubEnd Sub
[解决办法]
探讨
Option Explicit
Dim a()

Private Sub Command1_Click()
On Error GoTo L1
Debug.Print 1 / 0
L1:
Debug.Print Err.Description

On Error GoTo L2
Debug.Print a(1)
L2:
Debug.Print Err.Description
……

[解决办法]
在一般过程中随便怎么写都行,只是在循环中一定不能写on error goto 语句,写在里面是不会按你的意思运行的,在第二次错误时,会直接返回到过程调用者,切记啊。
[解决办法]
上面是我表达错误,在正常情况下循环中也可以使用,但在实际情况下循环中放on error goto 这种语句常会得到异常结果,可能只是个人遇到情况,没有通用性。
[解决办法]
我来补充两句——(怎么象打官腔啊)
第一句:On Error Goto 0 '恢复默认的错误处理
第二句:已经在错误处理里面,如果还想让错误处理生效,就将错误处理的代码写在一个新过程里。
[解决办法]
on error goto errHandle

exit_here:
...正常退出代码
errHandle:
...异常处理代码
goto exit_here

另外:
在必要的时候你可以向上抛出错误号给调用者。

读书人网 >VB

热点推荐