我正致力于生成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
答案 0 :(得分:1)
保存方法不会将更改传播到.oft文件。它将Microsoft Outlook项目保存到当前文件夹,如果是新项目,则将其保存到项目类型的Outlook默认文件夹中。
尝试打开现有的.oft文件而不将其复制到任何位置。然后执行所需的更改并调用SaveAs方法将其作为模板保存在您需要的任何位置。