首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >err.number为0,但无法编译(vb6)

err.number为0,但无法编译(vb6)
EN

Stack Overflow用户
提问于 2021-12-13 18:22:09
回答 1查看 156关注 0票数 1

我有以下代码

代码语言:javascript
复制
Private Sub Command1_Click()
    Dim vValidar As Integer

    If (MsgBox("Desea Generar el Arqueo?", vbYesNo + vbQuestion) = vbNo) Then Exit Sub

    frmEspere.Show
    If err.Number Then MsgBox ("Error code = " & err.Number & " Description: " & err.Description)
    On Error GoTo err
    vValidar = 0

在我接受msgbox (它转到err:)之后,它就会停止执行。当我检查err.number时,它的值是0。err.descritpion什么也不回。如果失败了,我能明白为什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-14 00:40:53

显然,您没有正确编译这段代码,而且它正在动态地解释它。使用VB6时,始终完全编译代码(CTL-F5)。因此,VB6没有意识到err标签在您真正尝试GoTo之前并不存在。所有这些代码都没有意义。在调用frmEspere.Show之前,您没有提供任何错误处理程序,但是在调用该方法之后将读取错误号。如果frmEspere.Show引发错误,您的程序将立即崩溃,因此它永远不会到达下一行。我建议您阅读Visual中的错误处理主题。但是,为了让您有一个开始,有两种使用错误处理的风格,您可以使代码工作。

首先,有“跳转到错误处理程序”的样式:

代码语言:javascript
复制
Private Sub Command1_Click()
    
    Dim vValidar As Integer

    On Error GoTo ErrorHandler
    
    If (MsgBox("Desea Generar el Arqueo?", vbYesNo Or vbQuestion) = vbNo) Then Exit Sub
    
    frmEspere.Show
    
Exit Sub

ErrorHandler:
    MsgBox "Error code = " & err.Number & " Description: " & err.Description
End Sub

还有“内联错误处理程序”样式:

代码语言:javascript
复制
Private Sub Command1_Click()
    
    Dim vValidar As Integer
    
    On Error Resume Next
    
    If (MsgBox("Desea Generar el Arqueo?", vbYesNo Or vbQuestion) = vbNo) Then Exit Sub
    
    frmEspere.Show
    
    If Err.Number <> 0 Then MsgBox "Error code = " & Err.Number & " Description: " & err.Description
    
End Sub

这两种样式都将所有错误看作是从您调用的语句或方法中隐藏的返回值(在调用ActiveX组件时,这些错误正是正在发生的)。错误发生后,您所调用的语句将先发制人地终止,Err对象中填充了NumberDescriptionSource属性。

我个人的喜好是以前的风格。本质上,您是在编写异常处理程序--错误通常不应作为应用程序正常功能的一部分发生。当您跳转到错误处理程序时,您可以使用Number属性来决定下一步要做什么。如果使用这种样式,则有三个选项:

value).

  • Resume

  • 退出该方法(可能通过ByRef参数返回状态,或者将ByRef返回到同一方法中的另一个标签。

  • 调用Err.Raise来重新定义当前的错误,或者引发不同的错误。

)

在使用这种样式时,您应该确保主代码在错误处理程序标签之前调用Exit Sub

使用后一种样式,您不会跳转到错误处理程序,而只是在引发错误的语句之后的语句。如果您愿意,可以忽略错误(我不会),但与前一种样式一样,您可以:

  • 退出该方法(可能通过Ref参数返回状态,或者将返回到下一行。
    • 调用Err.Raise来重新定义当前的错误,或者引发不同的错误。

    )

我干掉了vValidar = 0,因为它毫无意义。我将vbYesNo + vbQuestion更改为vbYesNo Or vbQuestion,因为该参数表示一系列应该是或应该放在一起的标志。你可能看到的每一个例子,包括微软自己的例子都是误导的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70339263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档