错误处理程序在函数VBA Access 2013中不起作用

时间:2017-08-04 16:12:06

标签: vba ms-access access-vba

所以我有一个功能,允许用户通过电子邮件发送更新的图片,以获得良好和良好的资产,除非用户在发送前关闭电子邮件。我有一个错误处理程序设置但它似乎没有捕获错误。这是我的功能代码:

Function Email()
Globals.Logging "Opened Email for updating picture"
On Error GoTo ErrorHandler:
Dim strTagNumber As String
strTagNumber = Me.txtTagNumber.Value

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

varName = "myAnon@email.test"
varCC = ""
varSubject = "Updated Picture for Asset Number " & strTagNumber
varBody = "Sent by MS Access"

DoCmd.SendObject , , , varName, varCC, , varSubject, varBody, True, False
Globals.Logging "Sent Email"

Cleanup:
  varName = Nothing
  varCC = Nothing
  varSubject = Nothing
  varBody = Nothing
  Exit Function

ErrorHandler:
  Select Case Err.Number
    Case 2501
      MsgBox "Email message was Cancelled."
      Globals.Logging "Canceled Email"
    Case Else
      MsgBox Err.Number & ": " & Err.Description
      Globals.Logging "Email Error " & Err.Number & ": " & Err.Description
  End Select
  Resume Cleanup
End Function

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

online documentation中所述,DoCmd.SendObjects

  

...使用邮件应用程序编程接口(MAPI)

换句话说,Access(或Excel)实际上没有自己的电子邮件功能。它取决于正确安装和配置的MAPI电子邮件客户端。除非您在Windows上有目的地安装并设置了另一个默认电子邮件客户端,否则默认情况下可能是Outlook,如果您已将其与MS Office一起安装。 Windows电子邮件客户端已经更改了许多版本的Windows,但默认情况下也可能是一个简单的Windows电子邮件客户端。

MAPI客户端很可能显示错误消息,然后在将程序流返回到发起调用的VBA模块之前,实际上没有抛出/引发错误。

我记得在某种程度上知道一个Outlook设置,它决定了MAPI和/或COM Automation界面的某些行为,无论它是否显示错误。在验证之前,我通常不会在Stack Overflow上丢弃这些如此无用的信息,但从我对此问题的讨论看,没有人真正解决SendObjects的这个方面。

除了使用自动化通过Outlook发送电子邮件之外,您可以检查Windows默认电子邮件客户端设置。也许测试另一个电子邮件客户端,看看你是否得到不同的结果。

答案 1 :(得分:0)

在Access 2016上测试。捕获到错误,我可以看到消息框中显示“电子邮件已取消。”。

也许您可以尝试使用Outlook对象发送电子邮件。