我正在尝试使用 MS Access VBA 发送 Outlook 电子邮件。我添加了 Outlook 16.0 参考。
代码返回:
应用程序定义的对象定义错误。
开
.ReplyRecipients.Add
如果我注释掉该行,则会在
.Send
上出错。
如果我在 Outlook 中运行代码,我会得到同样的错误。
Sub TestSend()
Call SendEmailOutlook("[email protected]", "Test message", "Test message.")
End Sub
Public Sub SendEmailOutlook(strTo As String, strSubject As String, strBody As String)
On Error GoTo SendEmailOutlookErr
Dim strEmail As String
Dim strMsg As String
Dim oLook As Object
Dim oMail As Object
Set oLook = CreateObject("Outlook.Application")
Set oMail = oLook.createitem(0)
With oMail
.ReplyRecipients.Add "[email protected]"
.to = strTo
.htmlbody = strBody
.Subject = strSubject
.Send
End With
Set oMail = Nothing
Set oLook = Nothing
Exit Sub
SendEmailOutlookErrExit:
Exit Sub
SendEmailOutlookErr:
MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
Resume SendEmailOutlookErrExit
End Sub
代码中使用了后期绑定技术,所以COM引用是可选的。但是,如果您已经添加了 Outlook COM 引用,则可以声明所有 Outlook 对象,而不仅仅是在声明中包含该对象。它可以提供帮助。在在自动化中使用早期绑定和后期绑定文章中了解有关后期和早期绑定的更多信息。
以下代码行还包含多个属性和方法调用:
With oMail
.ReplyRecipients.Add "[email protected]"
代码有效。但在单独的代码行中声明每个属性或方法是有意义的,这样您就可以轻松找到出错的地方 - 错误发生的确切位置。
MailItem.ReplyRecipients 属性返回一个 Recipients
集合,表示 Outlook 项目的所有回复收件人对象。使用
Add
方法创建一个新的
Recipient
对象并将其添加到
Recipients
对象。新收件人对象的
Type
属性设置为关联的
AppointmentItem
、
JournalItem
、
MailItem
或
TaskItem
对象的默认值,并且必须重置以指示其他收件人类型。
Set myItem = Application.CreateItem(olMailItem)
Set myRecipient = myItem.Recipients.Add ("Jon Grande")
myRecipient.Type = olCC
另一个方面是 Outlook 如何配置为信任客户端计算机上的应用程序,当 Outlook 在没有任何 UI 的情况下实现自动化时,使用 Outlook 对象模型访问某些数据或执行某些操作的应用程序可能会调用安全警告或引发错误。根据程序尝试访问或执行的信息或操作的类型,应用程序可以通过对象模型防护调用三种不同的安全提示:地址簿警告、发送消息警告和执行操作警告。请阅读Outlook 对象模型安全警告文章了解更多相关信息。