使用Access VBA在群发电子邮件中自定义字符串

时间:2017-02-12 17:55:22

标签: vba email ms-access outlook access-vba

我试图整理一个工具,将大量电子邮件发送到数据库表中的用户查询。我使用SendObject方法,它运行良好。

SendObject(ObjectType, ObjectName, OutputFormat, To, Cc, Bcc, Subject, MessageText, EditMessage, TemplateFile)

当我需要编写新的群发邮件时,我正在手动修改VBA代码;使用vbNewLine来表示MessageText字符串字段中的换行符,但我想创建一些类型的提示,要求用户输入他们的消息并在宏运行时使用换行符自动格式化,这样我就可以将宏发送到我的同事。

我想发送的电子邮件是新闻稿,其中有几段长度适合每个收件人(即:John Doe =亲爱的John Doe,Gary Stu =亲爱的Gary Stu)

我期待做什么?可以将SendObject设置为在发送之前提示用户选择编辑Outlook电子邮件,但每个修改对于每个单独的电子邮件都是唯一的。

2 个答案:

答案 0 :(得分:0)

您只需要创建变量来生成电子邮件或主题或两者。

为了从记录集中获取数据,假设tblContactData表具有名字,姓氏,emailID等。

    Dim strSubject as string, strSubjectLine as string
    Dim strMessageBody as string, strFirstName as string, strLastName as string, recContactData as DAO.recordset

set recContactData = CurrentDB.OpenRecordset("Select  * from tblContactData")

'Loop all the contacts for email
Do Until recContactData.EOF  = True
'    strSubjectLine = InputBox("Enter Subject Line", "Input")
    strSubjectLine = "Ref No" & recContactData.Fields("ContactID")
    strSubject = "Your email , " & strSubjectLine

    'strFirstName = InputBox("Enter First Name", "Input")
    strFirstName = recContactData.Fields("FirstName")
    'strLastName = InputBox("Enter Last Name", "Input")
    strLastName = recContactData.Fields("LastName")

    strMessageBody = "Hello " & strFistName & strLastName &  vbNewLine & vbCrLf & " Let me first congratulate you for registering this program"

    SendObject(, "", "", recContactData.Fields("EmailID"), "", "", strSubject, strMessageBody,false, "")

  recContactData.MoveNext
Loop

答案 1 :(得分:0)

您创建一个包含两个文本框的表单,txtFirstName,txtLastName。然后创建一个按钮并将此代码放在按钮单击事件中:

试试这个VBA代码:

Sub btnSend_Click()
  Dim message as String    
  'Make sure to handle the case if textboxes are empty

  message = "Dear " & txtFirstName.value & " " & txtLastName.value & ", " & _
            vbNewLine & "Let me be the first to congratulate you on your offer!"

  DoCmd.SendObject , "", "", rs![Email], "", "", "Congratulations on your hire!",  message , False, ""
End Sub