【问题标题】:Edit Outlook email from Excel VBA从 Excel VBA 编辑 Outlook 电子邮件
【发布时间】:2018-03-25 18:49:34
【问题描述】:

我有下面的代码来成功使用保存在我的机器上的预制 Outlook 模板 (fileName) 并将 Active Excel 文档附加到其中,但是我想添加一些额外的文本添加到电子邮件模板以节省我复制和粘贴它的时间。是否有向预制电子邮件模板添加额外的正文文本,或者如果我可以让我的 VBA 代码读取正文文本,然后我可以通过将其存储在临时变量中来添加它?这是一个保存的 .msg 文件

Public Function GenerateEmail(sendTo As String, _
    sendCC As String, sendBCC As String, _
    subjectText As String, fileName As String)

    Application.ScreenUpdating = False

    Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItemFromTemplate(fileName)

    With OutMail
        .sendTo = sendToText
        .CC = sendCCText
        .BCC = sendBCCText
        .Subject = subjectText
        .Attachments.Add (Application.ActiveWorkbook.FullName)
        .Display
    End With

    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Function

【问题讨论】:

  • 添加到现有变量.body = "Add your Text here" & .body.Htmlbody = html markup & .Htmlbody的常用方法

标签: excel excel-2010 outlook-2010 vba


【解决方案1】:

您必须保存一个模板 - 您只需起草一个模板(我通常使用标记来替换身体的某些部分,具体取决于收件人 - 例如“Dear %Recipient%”),然后“另存为”一个 .经常文件。然后运行你的代码来发送邮件。我还会使用.HTMLbody 来维护模板的格式,以便您输入

With OutMail
        .sendTo = sendToText
        .CC = sendCCText
        .BCC = sendBCCText
        .Subject = subjectText
        .HTMLbody= WorksheetFunction.Substitute(OutMail.HTMLbody, "%Recipient%", [Recipiants name here (this could be a stored string)])
        .Attachments.Add (Application.ActiveWorkbook.FullName)
        .Display
End With

【讨论】:

  • 哇,这正是我想要的!我会测试它并回复你!万分感谢! :)
  • @Maldred 没问题 :)
  • 我尝试运行此程序并使用以下 .HTMLbody = WorksheetFunction.Substitute(OutMail.HTMLbody, "%TESTNUM%", [98541]) 进行测试给了我一个编译错误,提示 “无法获取 WorksheetFunction 类的 Substitute 属性”。我需要添加对库的任何引用吗?
  • 如何向 .oft 文件添加标记?当我尝试运行上述代码时出现编译错误
  • @Maldred 方括号只是用来代表一个占位符 - 对于上面的示例,您需要输入的是 .HTMLbody = WorksheetFunction.Substitute(OutMail.HTMLbody, "%TESTNUM%", "98541")。要添加标记,只需转到保存 .oft 文件的位置,打开它并包含您需要的任何标记(这些标记应该是唯一的,以免在使用 .Substitute() 方法时造成任何问题 - 我已经在其中任何一个上放置了 %标记的结尾,但您可以轻松地使用“|”或“~”.. 或几乎任何东西!)
【解决方案2】:

只需在电子邮件文本中添加一个 .body,如下所示

 With OutMail
        .sendTo = sendToText
        .CC = sendCCText
        .BCC = sendBCCText
        .Subject = subjectText
        .body = "Add your Text here"
        .Attachments.Add (Application.ActiveWorkbook.FullName)
        .Display
End With

【讨论】:

  • 如果我添加这个,我模板上的正文会被我在 OutMail.Body 中键入的内容覆盖;我需要一种方法来阅读模板上已有的内容并添加到其中
  • 模板是如何创建的? (即文本或图像)
  • 邮件是.msg文件;基本上我所做的是当我创建一封新电子邮件时,我使用“另存为”并将其保存到一个文件夹中。因此,上面的代码使用了我预先制作的 10 种不同的已保存电子邮件之一,并将根据其他变量选择要使用的电子邮件。一旦它选择了一封电子邮件,它将附加活动工作表并添加除正文(在保存的文件中)之外的所有内容。我要做的就是在现有的正文中添加更多文本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多