VBA不会保存对显示.Display的Outlook模板的更改

时间:2015-05-07 02:51:19

标签: excel vba templates outlook

我正致力于生成OFT文件,这些文件将通过电子邮件发送给客户,然后客户将填写To:和Subject:in并将其作为电子邮件发送给客户。

我的数据来自Excel工作簿,其中一张包含静态数据(书籍),另一张信息由用户粘贴(Pins)。我有一个基本模板,其占位符文本被上述Excel工作表中的数据替换。

这个的一个重要部分是我需要将更改后的模板保存到自己的文件中,因此可以存储它以供日后参考。最初我有以下代码设置打开模板并调用.SaveAs myFilename,olTemplate但是这只是一个破碎的3KB文件。您会注意到我正在将模板复制到实际的目标文件并对其进行操作。

我的问题是如果我有模板项调用.Display,一切都很完美。我在正确的位置看到我的图像,并且所有文本都被正确替换。如果我打电话。保存它会保存原始OFT模板的副本而不存在任何更改。

谁能告诉我我在这里做错了什么?我一直在这里搜索谷歌几个小时试图找到我失踪的一些迹象。我试图尽可能地自动化这件事。使用Outlook的UI重新启动新的OFT对于同事来说是一个实时的接收器,如果可能的话,我想消除它。他们每天都会产生数十种OFT,所以我认为这项工作似乎值得。

更新 我设法让这个工作,但解决方案感觉像一个半答案。以下代码已更新,其中包含正确保存OFT的更改。

这是我的潜艇:

Sub OutlookTemplate(ByVal pins As Range, ByVal book As Range, ByVal ImageLocation As String)

    Dim myolapp As Object
    Dim myItem As Object

    Set myolapp = CreateObject("Outlook.Application")
    'myolapp.Session.Logon

    For Each p In pins.Cells
        If Not IsEmpty(p.Value) Then
            Dim myFilename As String
            myFilename = "c:\temp\" & Worksheets("PINS").Range("A2") & "-" & p.Value & ".oft"
            FileCopy "c:\template.oft", myFilename

            Set myItem = myolapp.CreateItemFromTemplate(myFilename)
            myItem.Save <- Added immediate save after creation of myItem

            myItem.Attachments.Add ImageLocation, olByValue, 0
            myItem.HTMLBody = Replace(myItem.HTMLBody, "THEIMAGE", "<img src='cid:" & book.Cells(2).Value & "'" & "width='154'>")
            myItem.HTMLBody = Replace(myItem.HTMLBody, "PINHERE", p.Value)
            myItem.HTMLBody = Replace(myItem.HTMLBody, "THETITLE", book.Cells(1).Value)
            myItem.HTMLBody = Replace(myItem.HTMLBody, "THESUBTITLE", book.Cells(3).Value)
            myItem.HTMLBody = Replace(myItem.HTMLBody, "THEAUTHORS", book.Cells(4).Value)
            myItem.HTMLBody = Replace(myItem.HTMLBody, "THEDESCRIPTION", book.Cells(5).Value)

            ' Leaving the next line off results in a broken image
            ' when .SaveAs is called
            myItem.Display

            ' This saves all of the changes out to the file properly
            ' in combination with .Display
            ' Note: if I call myItem.SaveAs myFilename, olTemplate 
            ' I get the 3KB broken OFT.  Omitting ,olTemplate works
            myItem.SaveAs myFilename



        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:1)

保存方法不会将更改传播到.oft文件。它将Microsoft Outlook项目保存到当前文件夹,如果是新项目,则将其保存到项目类型的Outlook默认文件夹中。

尝试打开现有的.oft文件而不将其复制到任何位置。然后执行所需的更改并调用SaveAs方法将其作为模板保存在您需要的任何位置。