【问题标题】:VBA - Sending Emails Through Outlook Based on Cell DataVBA - 基于单元格数据通过 Outlook 发送电子邮件
【发布时间】:2019-02-05 16:27:06
【问题描述】:

我一直在尝试为此编写代码而失败,所以如果有人可以帮助我在 excel 中创建一个宏,我会很高兴。我希望根据我添加到 excel 的数据,通过 Outlook 向一群用户发送访问凭据。具体来说,我有两个工作表:

1) 电子邮件信息(全静态)

这包含:

  • 单元格 C5 中的电子邮件主题
  • 单元格 C6 中的电子邮件正文(基本上这是说您好,您的用户凭据如下)
  • 单元格 C7 中的其他电子邮件正文(这部分内容类似于“如果您有任何问题,请告诉我们”)当然可以更新单元格 C6 和 C7 以包含任何语言

2) 用户信息(用户数量可能不同)

这包含:

  • A 列 - 名字
  • B 列 - 姓氏
  • C 列 - 全名(不需要)
  • D 列 - 电子邮件地址
  • E 列 - 密码

理想情况下,宏将能够查看用户信息,并使用以下格式为 D 列中的每个电子邮件地址从 Outlook 中创建一个新的、单独的电子邮件:

  • 电子邮件至:单元格 D2 中的电子邮件地址,直到最后一封电子邮件(用户信息工作表)
  • 电子邮件主题:电子邮件信息工作表中的单元格 C5
  • 用户信息工作表中 A 列的“Hi”名字值
  • 电子邮件信息工作表中单元格 C6 中的电子邮件正文第 1 部分
  • 用户名:这是 D 列中的电子邮件地址(与电子邮件收件人相同)
  • 密码:来自用户信息工作表中的 E 列
  • 电子邮件信息工作表中单元格 C7 中的电子邮件正文第 2 部分

希望有人有时间帮助我。

提前致谢!!

编辑

感谢您的帮助,巴里。这是我的代码,因为我试图引用两个不同的工作表。你能告诉我我做错了什么吗?

Sub GenerateEmail()
Dim sEmailBodyp1 As String
Dim sEmailBodyp2 As String
Dim sEmailSubject As String
Dim sEmailTo As String
Dim sFirstName As String
Dim sPassword As String
Dim OutApp As Object
Dim OutMail As Object
Dim EmailSheet As Worksheet
Dim UserSheet As Worksheet
Dim UsedRange As Range

Set EmailSheet = Sheets("Email Information")
Set UserSheet = Sheets("User Information")
Set sEmailSubject = EmailSheet.Cells("C5")
Set sEmailBodyp1 = EmailSheet.Cells("C6")
Set sEmailBodyp2 = EmailSheet.Cells("C7")
Set UsedRange = UserSheet.UsedRange

For Each Row In UsedRange.Rows
    sFirstName = Row.Columns(1)
    sEmailTo = Row.Columns(4)
    sPassword = Row.Columns(5)
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = sEmailTo
        .Subject = sEmailSubject
        .Body = "Hi " + sFirstName + "," + vbCrLf + vbCrLf + sEmailBodyp1 + vbCrLf + vbCrLf + "Username: " + sEmailTo + vbCrLf + "Password: " + sPassword + vbCrLf + vbCrLf + sEmailBodyp2
        .Display
    End With

    Set OutMail = Nothing
Next

Set OutApp = Nothing

结束子

【问题讨论】:

  • 请向我们展示您到目前为止所做的工作?
  • 这很容易编写,只需包含您(失败的)代码尝试,然后我们可以帮助您。
  • 如果没有你尝试的代码,这个问题可能会因为“太宽泛”而被关闭

标签: vba excel


【解决方案1】:

根据讨论,这是我对此解决方案的编辑。

Excel 宏

Public Sub GenerateEmail()
Dim sEmailBodyp1 As String
Dim sEmailBodyp2 As String
Dim sEmailSubject As String
Dim sEmailTo As String
Dim sFirstName As String
Dim sPassword As String
Dim OutApp As Object
Dim OutMail As Object
Dim EmailSheet As Worksheet
Dim UserSheet As Worksheet
Dim UsedRange As Range

Set EmailSheet = Sheets("Email Information")
Set UserSheet = Sheets("User Information")

sEmailSubject = EmailSheet.Range("C5").Value
sEmailBodyp1 = EmailSheet.Range("C6").Value
sEmailBodyp2 = EmailSheet.Range("C7").Value

Set UsedRange = UserSheet.UsedRange

For Each Row In UsedRange.Rows.Offset(1, 0).Resize(UsedRange.Rows.Count - 1, UsedRange.Columns.Count)

        sFirstName = Row.Columns(1)
        sEmailTo = Row.Columns(4)
        sPassword = Row.Columns(5)
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        With OutMail
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = "Hi " + sFirstName + "," + vbCrLf + vbCrLf + sEmailBodyp1 + vbCrLf + vbCrLf + "Username: " + sEmailTo + vbCrLf + "Password: " + sPassword + vbCrLf + vbCrLf + sEmailBodyp2
            .Display
        End With

        Set OutMail = Nothing

Next

Set OutApp = Nothing
End Sub

【讨论】:

  • 感谢您,非常有帮助。稍后添加更新
  • @Tom,感谢您的代码示例。我已经更新了我的答案以反映您的补充。两件事......字符串类型不使用关键字'set'。此外,sEmailSubject 的值来自 Range,而不是 Cell。
  • 这很漂亮 - 非常感谢!我会看看,让你知道是否有任何问题。再次感谢!!
  • 如果我想从单元格 2 及以下开始(因为第一行是标题),我该怎么做?
  • @Tom - (参见我编辑的答案中的示例)排除每行的行修改: For Each Row In UsedRange.Rows.Offset(1, 0).Resize(UsedRange.Rows.Count - 1、UsedRange.Columns.Count)
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多