通过VBA发送具有延迟绑定错误的电子邮件

时间:2013-04-12 12:54:27

标签: ms-access outlook access-vba office-2010 office-2003

我正在尝试使用后期绑定到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

2 个答案:

答案 0 :(得分:2)

如果没有引用,VBA将不会知道olToolCC等Outlook常量。使用后期绑定(无引用)时,必须为常量提供,而不是常量的名称

但是,由于您没有报告有关这些常量的编译错误,这表明您的代码模块在其声明部分中不包含Option Explicit。尝试在没有Option Explicit的情况下对VBA代码进行故障排除是浪费时间。

添加Option Explicit,然后从VB编辑器的主菜单中选择Debug-> Compile并修复编译器抱怨的任何内容。之后继续进行故障排除。

答案 1 :(得分:1)

有关使用早期和晚期绑定通过Outlook发送电子邮件的文章here。在最后的“Late Bound Conversion Checklist”中,最后一个建议是

  

添加具有默认值

的可选参数

我不能保证这个建议,因为当我需要从Access发送电子邮件时,我使用的是CDO,而不是Outlook。不过,听起来似乎值得一试。