【问题标题】:Prompt for customized message in mass-emails with Access VBA使用 Access VBA 在群发电子邮件中提示自定义消息
【发布时间】:2020-12-14 03:41:22
【问题描述】:

我正在尝试组合一个工具来向数据库表中的用户查询发送大量电子邮件。我正在使用 SendObject 方法,它运行良好。

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

当我需要新消息时,我手动修改 VBA 代码;使用 vbNewLine 来表示 MessageText 字符串字段中的换行符。

我想创建一个提示,要求用户输入消息,并在宏运行时自动设置换行符格式。

这些电子邮件是为每个收件人量身定制的几段长的时事通讯(例如,John Doe = Dear John Doe,Gary Stu = Dear Gary Stu)。

SendObject 可以设置为在发送前提示用户选择编辑电子邮件,但每个修改对于每封电子邮件都是唯一的。

【问题讨论】:

  • 您究竟在 VBA 中手动编辑什么?您是否将名称直接复制粘贴到代码中?在我看来,您需要的是一个精心制作的字符串操作函数,它可以根据需要将消息字符串组合在一起。这确实是可能的。如果您需要更多帮助,请举例说明您拥有什么以及您希望它成为什么。
  • 我所拥有的内容类似于DoCmd.SendObject , "", "", rs![Email], "", "", "Congratulations on your hire!", "Dear [first name] [last name] & vbNewLine & Let me be the first to congratulate you on your offer!", False, "" 我会修改 [first name] 和 [last name] 以匹配每个收件人的,而 MessageText 字段的其余部分将保持不变。我的目标是拥有某种形式,我可以在其中输入通用消息内容并自动换行并根据数据库中收件人的信息自动填写唯一字段。

标签: email ms-access outlook vba


【解决方案1】:

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

为了从记录集中提取数据,假设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 " & strFirstName & strLastName &  vbNewLine & vbCrLf & " Let me first congratulate you for registering this program"
    
    SendObject(, "", "", recContactData.Fields("EmailID"), "", "", strSubject, strMessageBody,false, "")

  recContactData.MoveNext
Loop

【讨论】:

  • 抱歉,我认为我没有正确解释我的意图。这个想法是让动态字段(例如 FirstName 和 LastName)从表条目中动态提取,而消息本身有一个输入框,可以自动将分段符识别为 vbNewLine 并将所有这些输入到 MessageText 字段中。
  • 那为什么需要输入框呢?我们可以循环记录集,在我上面的代码中用记录集的相应字段替换输入框。对于新行和回车,您不需要输入框。但是如果你想在输入框上做出决定,我们可以编写逻辑,但我没有看到任何这样的意图。
  • 输入框背后的想法是为我的同事降低编辑 VBA 代码的障碍。他们不是非常技术性的人,我担心他们会因为不得不将 vbNewLine 包裹在他们的段落中断周围而被推迟。如果有一个输入字段,他们可以在其中键入标准消息并让它使用 vbNewLines 自动解析输入,他们将更有可能接受自动电子邮件解决方案。这个记录集循环是我正在寻找的。非常感谢。
【解决方案2】:

您创建一个包含两个文本框 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

【讨论】:

  • 抱歉,我认为我没有正确解释我的意图。这个想法是让动态字段(例如 FirstName 和 LastName)从表条目中动态提取,而消息本身有一个输入框,可以自动将分段符识别为 vbNewLine 并将所有这些输入到 MessageText 字段中。
猜你喜欢
  • 2021-02-14
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多