【问题标题】:Error Catch if DoCmd.SendObject is terminated prematurely如果 DoCmd.SendObject 过早终止,则捕获错误
【发布时间】:2021-10-03 19:20:34
【问题描述】:

我在 MSAccess VBA 中有一个电子邮件 (SendObject) 例程。如果用户决定不提交点击发送按钮,代码会崩溃,并简单地关闭电子邮件表单。

Private Sub ButtonSupportEmail_Click()

Dim varName As Variant
Dim varCC As Variant
Dim varSubject As Variant
Dim varBody As Variant

varName = "somebody@gmail.com"
varCC = "somebody@gmail.com"

varSubject = "ADB Front End Client Support_" & Now()
varBody = "Dear Amazing ADB Support Team:"
DoCmd.SendObject , , , varName, varCC, , varSubject, varBody, True, False

End Sub

我可以添加一个错误捕获(通过弹出表单)提示用户“未发送电子邮件”并正常关闭吗?

图 A:用户关闭 Outlook 电子邮件表单时出错

【问题讨论】:

    标签: vba forms ms-access outlook vba6


    【解决方案1】:

    添加错误处理并忽略 2501 - 操作取消错误。

    Private Sub ButtonSupportEmail_Click()
        On Error GoTo Trap
    
        Dim varName As Variant
        Dim varCC As Variant
        Dim varSubject As Variant
        Dim varBody As Variant
    
        varName = "somebody@gmail.com"
        varCC = "somebody@gmail.com"
    
        varSubject = "ADB Front End Client Support_" & Now()
        varBody = "Dear Amazing ADB Support Team:"
        DoCmd.SendObject , , , varName, varCC, , varSubject, varBody, True, False
    
    Leave:
        Exit Sub
    
    Trap:
        If Err.Number <> 2501 Then MsgBox Err.Description, vbCritical
        Resume Leave
    End Sub
    

    【讨论】:

      【解决方案2】:

      当然 - 使用 On Error Resume next 并检查 Err.NumberErr.Description 来捕获和处理异常。

      更多信息请参见https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/on-error-statement

      【讨论】:

      • 我更多的是寻找可以帮助我的 sn-p,而不是“google it”的答案。我已经很接近了,但需要朝正确的方向轻推。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2010-09-16
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2021-11-14
      相关资源
      最近更新 更多