VBA不会将更改保存到使用.Display显示的Outlook模板中

我正在致力于生成OFT文件,这些文件将通过电子邮件发送给客户,客户将填写“收件人:”和“主题:”并将其作为电子邮件发送给客户。

我的数据来自Excel工作簿,其中一张工作表中包含静态数据(书籍)和用户粘贴的其他信息(引脚)。 我有一个基本的模板,占位符文本被上述Excel工作表中的数据所取代。

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

我的问题是,如果我有模板项目调用.Display,一切都是完美的。 我在正确的地方看到了我的形象,所有的文字都被正确地replace了。 如果我打电话,请保存一份原始OFT模板的副本,不要有任何更改。

有谁能告诉我我在做什么错在这里? 我一直在这里search和谷歌几个小时试图find我失踪的一些迹象。 我试图尽可能自动化这个东西。 用Outlook的UI重新设置新的OFT对于同事来说是一个真正的时间,如果可能的话,我想消除这个问题。 他们每天会产生几十个这样的OFT,所以我认为这个工作似乎值得。

更新我已经设法得到这个工作,但解决scheme感觉像是一个半答案。 下面的代码已更新,正确保存OFT的更改。

这是我的sub:

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 

Save方法不传播到.oft文件的更改。 它将Microsoft Outlook项目保存到当前文件夹,或者如果这是一个新项目,则保存到项目types的Outlook默认文件夹。

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