【问题标题】:Using Macros to send email to specific recipients使用宏向特定收件人发送电子邮件
【发布时间】:2018-05-02 16:52:06
【问题描述】:

我正在尝试向特定收件人发送电子邮件提醒,并将其关联的用户 ID 存储在 Excel 工作表中。如果收件人没有完成调查,电子邮件只会发送给他们。 (细胞(iCounter,3))

MailDest 是所有收件人电子邮件所在的位置。 DGName 包含收件人的所有关联用户 ID。一位收件人可以拥有多个用户 ID。

问题是收件人的所有用户 ID (DGName) 都是在发送给他们的每封电子邮件中生成的。

我应该如何编辑我的代码,以便它将电子邮件发送给收件人相关的电子邮件及其用户 ID?

编辑 以下是代码:

Sub SendReminderMail()

Dim OutLookApp As Object    
Dim OutLookMailItem As Object    
Dim iCounter As Integer    
Dim MailDest As String    
Dim DGName As String

Set OutLookApp = CreateObject("Outlook.application")    
Set OutLookMailItem = OutLookApp.CreateItem(0)

With OutLookMailItem    
    MailDest = ""    
    For iCounter = 1 To WorksheetFunction.CountA(Columns(5))

        If MailDest = "" And Cells(iCounter, 3) = "" Then
            MailDest = Cells(iCounter, 5).Value
            DGName = Cells(iCounter, 1).Value
        ElseIf MailDest <> "" And Cells(iCounter, 3) = "" Then
            MailDest = MailDest & ";" & Cells(iCounter, 5)
            DGName = DGName & ";" & Cells(iCounter, 1)
        End If

    Next iCounter

    .BCC = MailDest
    .Subject = "W2K16 update on Cloudworkplace Desktop Group"
    .HTMLBody = "Dear ~Whoever ," & "<br/><br/>" & DGName & "<br/><br/>" & " ~Message"
    .send

在此示例中,如果“反馈”列为空,则会触发宏向收件人发送提醒邮件。

Sample Excel Data

【问题讨论】:

  • 为什么在 VBA 代码中使用双倍行距?
  • 嗨,对不起。我对Stackoverflow的界面不熟悉,所以把代码放在``里,用行距隔开。
  • 粘贴您的代码,然后全选并按 ctrl+K。

标签: vba excel email


【解决方案1】:

好吧,目前您将 1 封电子邮件发送到多个地址 (BCC)。因此,您需要更改代码以发送多个单独的邮件(每个地址 1 封邮件)。

因此只需将发送邮件的代码放在 for 循环中:

With OutLookMailItem       
    For iCounter = 1 To WorksheetFunction.CountA(Columns(16))
        If Cells(iCounter, 14) = "" Then
            MailDest = Cells(iCounter, 16).Value
            DGName = Cells(iCounter, 12).Value
            .To = MailDest
            .Subject = "W2K16 update on Cloudworkplace Desktop Group"
            .HTMLBody = "Dear ~Whoever ," & "<br/><br/>" & DGName & "<br/><br/>" & " ~Message"
            .send
        End If
    Next iCounter

【讨论】:

  • 嗨@Pᴇʜ,非常感谢您的回复!另一个小问题,如果我想在同一封电子邮件中显示多个 DGName,我该怎么办?
  • @AshKetchum 我不明白这有什么意义。 1 个邮件地址对应 1 个姓名。如果不是,你必须更具体。
  • 嗨@Pᴇʜ,很抱歉给您带来不便。变量“DGName”实际上是与收件人关联的用户 ID。所以基本上,一个收件人可以在同一封电子邮件下注册许多不同的 DGName。我希望实现的是,我要发送的提醒将包含与同一电子邮件地址关联的不同 DGName。希望能解开你的疑惑。
  • @AshKetchum 好吧,现在这是一个完全不同的问题。这无法在简短的评论中回答。在不知道您的数据长什么样的情况下也无法回答。因此,我建议提出一个新问题,包括示例数据或屏幕截图。
  • 好的。感谢您的回复。
【解决方案2】:

当我查看您的代码时发现 DGName 变量在再次循环到 For 1st 循环后需要生成空白字符串

我在解决方案中写这个,因为无法写评论。 代码如下所示

Sub SendReminderMail()

Dim OutLookApp As Object
Dim OutLookMailItem As Object
Dim iCounter As Integer
Dim MailDest As String
Dim DGName As String

Set OutLookApp = CreateObject("Outlook.application")
Set OutLookMailItem = OutLookApp.CreateItem(0)

With OutLookMailItem
    MailDest = ""

    For iCounter = 1 To WorksheetFunction.CountA(Columns(16))
    DGName = "" 'see here

        If MailDest = "" And Cells(iCounter, 14) = "" Then
            MailDest = Cells(iCounter, 16).Value
            DGName = Cells(iCounter, 12).Value
        ElseIf MailDest <> "" And Cells(iCounter, 14) = "" Then
            MailDest = MailDest & ";" & Cells(iCounter, 16)
            DGName = DGName & ";" & Cells(iCounter, 12)
        End If

    Next iCounter

    .BCC = MailDest
    .Subject = "W2K16 update on Cloudworkplace Desktop Group"
    .HTMLBody = "Dear ~Whoever ," & "<br/><br/>" & DGName & "<br/><br/>" & " ~Message"
    .send

【讨论】:

  • 嗨@Dinesh Pawar。使用您提供的解决方案,发出的电子邮件中没有 DGName。我应该如何进行?
猜你喜欢
  • 2021-07-19
  • 2012-05-18
  • 2014-06-22
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多