Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel VBA编辑Outlook电子邮件_Excel_Excel 2010_Outlook 2010_Vba - Fatal编程技术网

从Excel VBA编辑Outlook电子邮件

从Excel VBA编辑Outlook电子邮件,excel,excel-2010,outlook-2010,vba,Excel,Excel 2010,Outlook 2010,Vba,我有下面的代码成功地使用了一个预先制作的Outlook模板,该模板保存在本地计算机上(文件名),并将活动的Excel文档附加到其中,但是我想向电子邮件模板添加一些额外的文本,以节省复制和粘贴它的时间。是否需要向预先制作的电子邮件模板中添加其他正文,或者如果我可以让VBA代码读取正文,然后通过将其存储在临时变量中来添加正文?这是一个保存的.msg文件 Public Function GenerateEmail(sendTo As String, _ sendCC As String, se

我有下面的代码成功地使用了一个预先制作的Outlook模板,该模板保存在本地计算机上(文件名),并将活动的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,如下所示

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

您必须保存一个模板-您只需起草一个模板(我通常使用标记来替换正文的某些部分,具体取决于收件人,如“亲爱的%recipient%”),然后“另存为”一个.oft文件。然后运行代码发送邮件。我还将使用
.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

如果我加上这个,模板上的正文被我在OutMail.body中键入的内容覆盖了;我需要一种方法,我可以阅读什么已经在模板上,并添加到我的模板是如何创建的?(即文本或图像)电子邮件是.msg文件;基本上,我所做的是当我创建一封新的电子邮件时,我使用“另存为”并将其保存到一个文件夹中。因此,上面的代码使用了我预先制作的10封不同保存的电子邮件中的一封,并将根据其他变量选择要使用的电子邮件。一旦选择电子邮件,它将附加活动工作表并添加除正文(保存的文件中)之外的所有内容。我想做的就是在已有的正文中添加更多的文字哇,这正是我想要的!我会测试一下,然后再给你回复!非常感谢!:)@Maldred没问题:)我试着运行这个并用下面的
.HTMLbody=WorksheetFunction.Substitute(OutMail.HTMLbody,“%TESTNUM%”,[98541])进行测试。
在那一行给了我一个编译错误,说“无法获取WorksheetFunction类的Substitute属性”。我需要向库添加任何引用吗?如何向.oft文件添加标记?当我尝试运行上面的程序时,我得到了一个编译错误code@Maldred方括号正好代表一个占位符-对于上面的示例,您需要放置的是
.HTMLbody=WorksheetFunction.Substitute(OutMail.HTMLbody,“%TESTNUM%”,“98541”)
。要添加标记,只需转到保存.oft文件的任何位置,打开它并包含您需要的任何标记(这些标记应该是唯一的,以便在使用
.Substitute()
方法时不会引起任何问题-我已在标记的任一端放置了%,但您可以同样轻松地使用“|”或“~”。或几乎任何东西!)添加到现有变量
.body=“在此处添加文本”和.body
.Htmlbody=html标记和.Htmlbody