1

示例:Outlook 中的面试确认电子邮件。

亲爱[A]的,
您的采访[B]已确认[C]。地址是[D]
谢谢你,
约翰·多伊

A- 名字
B- 公司名称
C- 日期和时间
D- 实际地址

我见过人们为此使用 Excel,但我希望能够在某处输入A、和值,单击发送,仅此而已BCD

我遇到的所有代码都可以实现可变因素,但几乎没有任何电子邮件正文的代码,如果有,它们都没有包含 .oft 文件。

4

1 回答 1

1

您的问题意味着您期望找到一些完全符合您要求的代码。也许这是不公平的批评,但许多人似乎确实希望他们的确切要求已经存在,或者有人为他们编写代码。

如果我有一个需要对我来说是新功能的专业知识的需求,我会分别研究每个领域,然后进行试验,然后再尝试使用我的新知识来满足我的需求。

您的要求所需的第一个知识是创建一个电子邮件模板文件。我假设您已经知道如何做到这一点,但如果不知道,有很多网站解释了如何做到这一点。我用名称“StdMsg.oft”保存了我的模板。您将需要修改我的宏以将您的名字用于您的模板。

您可以将电子邮件模板文件保存在任何地方,但最好使用默认位置,以便所有模板都放在一起。当您想要打开模板时,您的宏需要知道它在哪里。对于 Windows 10,默认位置是“C:\Users\xxxxx\AppData\Roaming\Microsoft\Templates”,其中“xxxxx”是您的用户名。您可以输入此字符串,但如果您希望与同事共享此宏,您可能希望向系统询问“xxxxx”的当前值。我很容易找到一个给我默认位置的网站,但找到一个告诉我如何获取“xxxxx”值的网站更加困难。我发现很多网站告诉我如何获得“xxxxx”的价值,但大多数都是错误的或假设读者可能不知道的知识。我保留了一个名为“Resources”的文件夹,其中包含 Html、Css、VBAExcel、VBAOutlook 和 VBAGeneral。这些子文件夹包含记录我不太可能记住的有用片段的文本文件。建议你创建一个类似的文件夹,记录下我是如何得到“xxxxx”的值的。

接下来,您需要打开电子邮件模板文件。我发现很多网站都显示了如何从 Excel 中执行此操作,但我没有找到一个网站显示如何从 Outlook 中正确执行此操作。在 Excel 中,您必须创建一个 Outlook 应用程序对象。在 Outlook 中,您已经在 Outlook 应用程序对象中,因此您无需创建另一个。事实上,您不能创建新的 Outlook 应用程序对象,因为 Outlook 只允许运行其自身的一个版本。如果您尝试创建一个新的 Outlook 应用程序对象,您将获得对已在运行的副本的引用。同样,您可能希望将此信息记录在资源文件夹中。

我曾经InputBox从用户那里获取四个值。如果我为自己或客户编写此宏,我会使用表单。如果您已经知道,很难展示如何创建一个会浪费精力的表单。

打开电子邮件模板后,您可以访问其所有属性。这个网站和其他地方有很多答案,展示了如何修改电子邮件的 html 或文本正文。我假设您想发送 html 电子邮件,所以我修改了 html 正文。

我的宏会显示已编辑的电子邮件,但如果您不想在发送前检查电子邮件,您可以使用它Send来代替。Display

Sub SendStdMsgOft()

  Dim Address As String
  Dim CompanyName As String
  Dim DateAndTime As String
  Dim FirstName As String
  Dim NewEmail As MailItem
  Dim PathFileName As String

  PathFileName = Environ("AppData") & "\Microsoft\Templates\StdMsg.oft"

  Set NewEmail = CreateItemFromTemplate(PathFileName)

  FirstName = InputBox("First name")
  CompanyName = InputBox("Company name")
  DateAndTime = InputBox("Date And Time")
  Address = InputBox("Address")

  With NewEmail
    .HtmlBody = Replace(.HtmlBody, "[A]", FirstName)
    .HtmlBody = Replace(.HtmlBody, "[B]", CompanyName)
    .HtmlBody = Replace(.HtmlBody, "[C]", DateAndTime)
    .HtmlBody = Replace(.HtmlBody, "[D]", Address)
    .Display
  End With

End Sub
于 2019-05-29T23:36:41.570 回答