调用子过程的错误处理表格-MS Access VBA

埃彭克拉托娃
  1. 是的,已使用访问权限,并且无法更改。
  2. 我有一个表单类对象,可以这样说:
Option Compare Database

Private Sub cmdCalculate_Click()

Dim Employee As String

    Employee = InputBox("Enter Name of Employee")
    
    If InStr(Employee, "Eka") > 0 Then
     Call Hello
    Else
     Call Hello2
    End If
    
End Sub

我有一个模块。如您所见,我从表单中调用每个过程。

Option Compare Database
Option Explicit

Public Sub Hello()
    
    MsgBox "Hello Eka"

End Sub

Public Sub Hello2()

    MsgBox "Hello stranger"

End Sub

我遇到的问题是错误处理的实现,因为这里有我称为的后续过程。我试图添加一个简单的方法On Error GoTo-参见下面的单个子过程以显示一条好消息并中断整个脚本执行,但是是的,该子过程将显示一条好消息,单击“确定”将其关闭,主脚本继续运行。您能否将我定向到一个来源,在这里我可以阅读更多有关潜在解决方案的信息或提供帮助?我发现了有关全局错误处理的内容,但不确定是否相关。

Private Sub cmdCalculate_Click()
On Error GoTo errormessage

#TO-DO. VBA Code

Exit Sub

errormessage:
MsgBox "An error has occured. Please check your work."

End Sub
未处理的异常

这是一个小样本。

  • MainProcedure电话SubProcedure1和此电话SubProcedure2
  • SubProcedure2其中将除以零误差。
  • SubProcedure2处理此错误并将其重新引发到调用堆栈中的上层过程:SubProcedure1
  • SubProcedure1现在也要处理并重新评估它MainProcedure
  • MainProcedure现在显示错误。如果需要,它可以立即停止执行。

备注1:很遗憾,VBA没有在运行时可以读取的调用堆栈信息。因此,在我的示例中,我总是将当前过程名称作为新行添加到source错误属性的顶部所以最后您可以看到错误发生在哪里以及调用堆栈如何。但这只是一个例子。

备注2:例如,如果您不将活动的错误处理程序放入SubProcedure1错误中,则会将自身冒泡到MainProcedure,但是您就无法添加调用堆栈信息。

Public Sub MainProcedure()
    On Error GoTo Catch

    SubProcedure1

Finally:
    Exit Sub

Catch:
    MsgBox Err.Number & " : " & Err.Description & vbNewLine & vbNewLine & "- MainProcedure" & vbNewLine & Err.Source, vbCritical
    Resume Finally
End Sub

Public Sub SubProcedure1()
    On Error GoTo Catch

    SubProcedure2

Finally:
    Exit Sub

Catch:
    Err.Raise Err.Number, "- SubProcedure2" & vbNewLine & Err.Source, Err.Description
    Resume Finally
End Sub

Public Sub SubProcedure2()
    On Error GoTo Catch

    Dim value As Long
    value = 0

    Dim value2 As Long
    value2 = 1 / value

Finally:
    Exit Sub

Catch:
    Err.Raise Err.Number, "- SubProcedure2" & vbNewLine & Err.Source, Err.Description
    Resume Finally
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MS ACCESS vba-错误

来自分类Dev

MS Outlook会干扰Access vba过程

来自分类Dev

如何从MS Access 2003 VBA处理MS Excel分页符

来自分类Dev

MS Access VBA IF()

来自分类Dev

Int()函数MS Access VBA

来自分类Dev

MS Access VBA 运行查询

来自分类Dev

Ms Access 数据宏调用 VBA 函数开箱即用

来自分类Dev

VBA (Ms-Access) 从宏调用成员函数

来自分类Dev

MS Access VBA / SQL检查任何子级

来自分类Dev

MS ACCESS VBA运行时错误“ 3021”;与.MoveNext

来自分类Dev

VBA (Ms-Access) 2013 溢出错误

来自分类Dev

MS ACCESS - VBA 中的错误运行时 3141 SQL

来自分类Dev

从VBA SQL语法错误将MS EXCEL转换为MS ACCESS .accdb数据库

来自分类Dev

MS Access VBA:出现错误“ 13”:从其他形式调用函数时,键入不匹配

来自分类Dev

带VBA的MS Access链接表

来自分类Dev

MS Access中VBA代码的继承

来自分类Dev

多参数IsNull函数MS Access VBA

来自分类Dev

SQL语法问题MS Access VBA

来自分类Dev

MS-Access:使用vba移至NavigationControl

来自分类Dev

MS Access VBA:如何清除图像控件?

来自分类Dev

是/否字段上的MS Access VBA Dlookup

来自分类Dev

MS Access查询未从VBA接收参数

来自分类Dev

MS Access VBA:OpenRecordSet返回什么?

来自分类Dev

MS Access VBA,SQL脚本:In(),<>和AND语法

来自分类Dev

使用VBA显示MS Access报告

来自分类Dev

MS ACCESS VBA按案例订购的时间

来自分类Dev

MS Access VBA - 使用日期过滤表单

来自分类Dev

MS Access VBA 查询多个表

来自分类Dev

DLookup:MS Access VBA 中的查询与表?