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] 删除。
我来说两句