通过 VBA 发送具有后期绑定错误的电子邮件
Posted
技术标签:
【中文标题】通过 VBA 发送具有后期绑定错误的电子邮件【英文标题】:Sending Email with Late Binding Error Through VBA 【发布时间】:2013-04-12 12:54:27 【问题描述】:我正在尝试在 Access 2010 和 Access 2003 中对来自 VBA 的电子邮件使用后期绑定。2003 给我“无法完成操作。一个或多个参数值无效。并且 2010 给了我“无效的过程调用或参数”。我已经完成了这一步,但它在底部附近的.send
处失败。我是否设置了错误的绑定?我正在尝试在参考中不使用 Microsoft 对象库的情况下执行此操作。
谢谢。
'Refers to Outlook's Application object
Dim appOutlook As Object
'Refers to an Outlook email message
Dim appOutlookMsg As Object
'Refers to an Outlook email recipient
Dim appOutlookRec As Object
'Create an Outlook session in the background
Set appOutlook = CreateObject("Outlook.Application")
'Create a new empty email message
Set appOutlookMsg = appOutlook.CreateItem(olMailItem)
'Using the new, empty message...
With appOutlookMsg
strSQL = "SELECT Email FROM Employees WHERE " & sqlVar & " = True"
Set myR = CurrentDb.OpenRecordset(strSQL)
Do While Not myR.EOF
Set appOutlookRec = .Recipients.Add(myR!Email)
appOutlookRec.Type = olTo
myR.MoveNext
Loop
strSQL = "SELECT Email FROM Employees WHERE '" & user & "' = Username"
Set myR = CurrentDb.OpenRecordset(strSQL)
Set appOutlookRec = .Recipients.Add(myR!Email)
appOutlookRec.Type = olCC
.Subject = wonum
.Body = "Department: " & strDep & vbNewLine & vbNewLine & _
"Issue is at: " & strIssue & vbNewLine & vbNewLine & _
"Priority is: " & strPriority & vbNewLine & vbNewLine & _
"Complete by: " & strDate & vbNewLine & vbNewLine & _
"Description: " & strDesc
.Send
End With
【问题讨论】:
【参考方案1】:如果没有引用,VBA 将不知道 Outlook 常量,例如 olTo
和 olCC
。使用后期绑定(无引用),您必须提供常量的值,而不是常量的名称。
但是,由于您没有报告关于这些常量的编译错误,这表明您的代码模块在其声明部分中不包含 Option Explicit
。尝试在没有Option Explicit
的情况下对 VBA 代码进行故障排除是浪费时间。
添加Option Explicit
,然后从VB 编辑器的主菜单中选择调试->编译并修复编译器抱怨的任何问题。之后继续进行故障排除。
【讨论】:
好点。当我看到.CreateItem(olMailItem)
时,我认为代码中的其他地方一定有Const olMailItem = 0
。多年来,使用Option Explicit
对我来说是如此自动,以至于当我考虑问题时,我什至没有想到它。
我添加了 Option Explicit 并发现了一些错误。但是我应该将 olTo 和 olCC 设置为什么?我将它们设置为Const olTO = 0
,它在正确编译后仍然给了我同样的错误。 (PS 感谢您提供明确的信息)
来自 OlMailRecipientType 枚举:msdn.microsoft.com/en-us/library/office/ff865653.aspx
添加Option Explicit
然后使每个olMailItem, olTo, and olCC
成为一个常数。感谢大家的帮助!【参考方案2】:
有一篇文章here 介绍了使用早期和晚期绑定通过 Outlook 发送电子邮件。在最后的“Late Bound Conversion Checklist”中,最后的建议是
添加具有默认值的可选参数
我不能保证该建议,因为当我需要从 Access 发送电子邮件时,我使用的是 CDO,而不是 Outlook。不过,听起来可能值得一试。
【讨论】:
以上是关于通过 VBA 发送具有后期绑定错误的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA:如何在 Outlook 中向组发送电子邮件?