'画面的一个按钮动作处理函数
Private Sub cmd_Click()
    On Error GoTo dsadsads
 
    a = 1/0        Exit Subdsadsads:
        MsgBox Err.Description
End Sub
上面可以正常捕获并显示消息如果是调用类对象的方法出现异常则不行!!!
代码如下Private Sub cmd_Click()
    On Error GoTo dsadsads
    Dim obj As New Class1
    obj.aaaaa
    Exit Subdsadsads:
        MsgBox Err.Description
End Sub'Class1的代码,就下面一个测试用方法
Public Function aaaaa() As Integer
i = 9 / 0aaaaa = 0
End Function后面这种情况会出现运行期错误,而不是自己要显示的错误消息框。晕倒,咋办?

解决方案 »

  1.   

    class的function是自己写的当然可以想办法啦,如果不能改呢?
    或者这个类是其他地方引用来的,咋办?不是处理不了吧
      

  2.   

    别的不说了,楼主看一下这段代码:
    private sub command1_click()
      on error goto er1
      shell "c:\test.exe"
      exit sub
    er1:
      msgbox "exe run error!"
    end sub
      

  3.   

    在class里面捕捉后传出要显示的错误信息
      

  4.   

    happy_sea(开心海),你举的例子和我举的第一个例子没什么大区别,解决不了问题
      

  5.   

    我举的例子出现异常肯定是有原因的
    也就是说,能够在不修改Class1的情况下解决问题等某人来说明,只要粘边就结贴送分,暂时还送不了分。
      

  6.   

    “On Error GoTo dsadsads”只能捕获它下面“dsadsads:”上面的程序的语句错误,而无法捕获到其中调用的函数里的错误
      

  7.   

    “On Error GoTo dsadsads”只能捕获它下面“dsadsads:”上面的程序的语句错误,而无法捕获到其中调用的函数里的错误
    ==============
    可以的, 只要是在本image的代码就行。
    onerror的错误机制是会想向上查找SEH连的, 我原来回过一个帖子很详细的描述了on error
    的原理, 使用以及实现。很抱歉, 刚回答的有些仓促。
    如果这个类是你自己做的,那么是可以检测到这个错误的。
    你只所以还是抱错了, 是你在ide中运行的, 你编成exe就没事了。
    如果你想让ide忽略这个错误, 可以设置的
    tools->options->general->error trapping设置成break on all unhandled errors
      

  8.   

    To 开心海请原谅我的笨,我没有看出以及测出这代码会出现什么错误,请告知
    private sub command1_click()
      on error goto er1
      shell "c:\test.exe"
      exit sub
    er1:
      msgbox "exe run error!"
    end sub谢谢
      

  9.   

    如果是其他的dll什么的, 产生的错误, 比如内存越界, 这个是vb所没handle的, 所以他即便抓住了, 但是继续throw出去, 由于throw出去后在没人处理了, 就失败了。
    但如果dll是一个除0错误, 那么这个错误是vb所handle的, 那么他抓住了, 则自己处理
    表现到代码里面则调用onerror指定的 我刚做了2个典型的方式做了实验
    vb掉dll, 
    dll函数1产生内存缺页错误, vb抓不住(其实是vb抓住了然后发现是unhandled不知道怎么处理,又在一次抛出了)
    dll函数产生除0错误, 被vb抓住了。
      

  10.   

    又在一次抛出了, 这里说错了, 不是再一次抛出, 而是直接调用vb的runtime error。
      

  11.   

    pigsanddogs朋友把这个问题分析的很透彻了,我一开始以为类模块中的错误是无法从窗体的代码中捕获的,所以写了以上的代码,意思是test.exe本身运行发生错误的话VB是无法捕获的,可是经过测试只要把选项-通用中的“错误捕获”设置为“遇到未处理的错误时中断”就可以了,而其他两种都不行,所以这并不是VB的bug而是设置问题。
      

  12.   

    'Class1的代码,就下面一个测试用方法
    Public Function aaaaa() As Integer
    On Error GoTo Err1
    i = 9 / 0aaaaa = 0Err1:
    If Err.Number <> 0 Then Err.Raise Err.NumberEnd Function
      

  13.   

    pigsanddogs(我爱吃猪肉,但是长不胖,为什么??) 分析的非常好
    我所举的例子,编译成EXE是没问题的,调试时和IDE设定有关系。关于错误处理,补充一个链接供参考,很详细
    上面这个问题在里面也有描述
    http://www.keysound.com/html/ch_9_frequently_asked_question.htm