所以我有一个功能,允许用户通过电子邮件发送更新的图片,以获得良好和良好的资产,除非用户在发送前关闭电子邮件。我有一个错误处理程序设置但它似乎没有捕获错误。这是我的功能代码:
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
任何帮助将不胜感激。提前谢谢。
答案 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对象发送电子邮件。