【问题标题】:Access 2013 VBA: Query recipient email addressAccess 2013 VBA:查询收件人电子邮件地址
【发布时间】:2020-07-13 18:33:50
【问题描述】:

如何将以下 SQL 查询添加为 Outlook 电子邮件的收件人?

SELECT 
     E.Email
FROM 
     Employee E
          INNER JOIN ProposalTracking P ON E.Initials = P.UW

这是目前仅在 Outlook 中打开一封新电子邮件的 VBA 代码:

Private Sub btnEmail_Click()

Dim varName As Variant
Dim varSubject As Variant
Dim varBody As Variant

varName = "first.last@example.com"

varSubject = "TPS Report"

varBody = "Did you see the memo? We use the new cover sheets now."

DoCmd.SendObject , , , varName, , varSubject, varBody, True, False

End Sub

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    通过 DAO 实现的一种方式:

    Dim email as string
    Dim sqlSTR as string
    Dim r As DAO.Recordset
    Dim dbs as DAO.database
    set dbs = currentDB()
    sqlSTR = "SELECT E.Email FROM  Employee E INNER JOIN ProposalTracking P ON E.Initials = P.UW"
    
    Set r = dbs.OpenRecordset(Name:=sqlSTR , Type:=dbOpenSnapshot)
    varName = r![Email]
    r.close
    

    虽然,如果这样做,我会在 where 子句中添加变量。它看起来像这样:

    Dim varSubject As Variant
    Dim varBody As Variant
    Dim email as string
    Dim sqlSTR as string
    Dim r As DAO.Recordset
    Dim varInitials as string
    Dim dbs as DAO.database
    
    set dbs = currentDB()
    
    varInitials = "P.UW"
    sqlSTR = "SELECT E.Email FROM  Employee E INNER JOIN ProposalTracking P ON E.Initials = P.UW WHERE " & someField & " = & " & """" & someVariable & """"
    
    Set r = dbs.OpenRecordset(Name:=sqlSTR , Type:=dbOpenSnapshot)
    varName = r![Email]
    r.close
    
    varSubject = "TPS Report"
    
    varBody = "Did you see the memo? We use the new cover sheets now."
    
    DoCmd.SendObject , , , varName, , , varSubject, varBody, True, False
    

    在 sqlSTR 中,将 someField 替换为您的匹配项(例如,P.UW),并将 someVariable 替换为您希望匹配的某个值(例如,“John”)。如果它是一个 int 值,请从 someVariable 值周围删除 & """"

    【讨论】:

    • 谢谢。当我运行其中任何一个时,我都会收到“编译错误:未定义用户定义的类型”,突出显示“r As DAO.Recordset”。
    • 通过单击 VBA 窗口中的工具 --> 引用来添加引用。向下滚动,直到看到 Microsoft DAO X.X 对象库。选择最高版本,点击“确定”
    • 好的,谢谢。接下来我收到“不支持 JOIN 表达式”,因此我在 ON 子句周围加上括号,将代码从红色变为黑色。但是我在单击按钮时再次遇到相同的错误,现在“Set r = dbs.OpenRecordset(Name:=sqlSTR, Type:=dbOpenSnapshot)”以黄色突出显示。
    • 您是从 Access 中运行的,因此请确保所有这些表都直接存放在此应用程序中(链接的或本地的,只要名称保持不变就没有关系)。我没有查看您的 SQL 查询。您需要像这样更新: sqlSTR = "SELECT E.Email FROM Employee E INNER JOIN ProposalTracking P ON E.Initials = P.UW WHERE " & someField & " = & " & """" & someVariable & "" "" 我会更新上面的代码来反映
    • 到目前为止一切顺利,谢谢。下一个错误是“参数太少。应为 1。” “Set r = dbs.OpenRecordset(Name:=sqlSTR, Type:=dbOpenSnapshot)”以黄色突出显示。
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多