代码之家  ›  专栏  ›  技术社区  ›  Grant

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

  •  2
  • Grant  · 技术社区  · 12 年前

    我正在尝试在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 回复  |  直到 12 年前
        1
  •  2
  •   HansUp    12 年前

    如果没有引用,VBA将不知道Outlook常量,例如 olTo olCC 。对于后期绑定(无参考),您必须提供 价值观 对于常量,而不是 姓名 常数。

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

    添加 选项显式 ,然后选择“调试”->从VB编辑器的主菜单进行编译,并修复编译器抱怨的任何问题。之后继续进行故障排除。

        2
  •  1
  •   Gord Thompson    12 年前

    有一篇文章 here 关于使用早期和后期绑定通过Outlook发送电子邮件。在最后的“后期转换清单”中,最后一个建议是

    添加具有默认值的可选参数

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