我正在保存Outlook附件(作为副本的一部分)。
我得到一个错误信息,从行 objAtt.SaveAsFile strFile
当附件是嵌入式图片时。
代码(感激地复制!)是。
Sub CopyAttachments(objSourceItem, objTargetItem)
Dim objAtt As Outlook.Attachment
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In objSourceItem.Attachments
strFile = strPath & objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , 1, objAtt.DisplayName
fso.DeleteFile strFile
Next
Set fldTemp = Nothing
Set fso = Nothing
End Sub
完整的错误信息是:
我不需要嵌入式图片,所以跳过它们也可以。
首先,确保文件路径是完全限定的,也就是说,你在这里用一个有效的字符串结束。
strFile = strPath & objAtt.FileName
第二,当你调用 Attachments.Add
确保该文件存在于磁盘上。附件的来源可以是一个文件(用文件名表示完整的文件系统路径)或构成附件的Outlook项目。
你可以尝试运行以下代码,将附件保存在磁盘上。
Sub SaveAttachment()
Dim myInspector As Outlook.Inspector
Dim myItem As Outlook.MailItem
Dim myAttachments As Outlook.Attachments
Set myInspector = Application.ActiveInspector
If Not TypeName(myInspector) = "Nothing" Then
If TypeName(myInspector.CurrentItem) = "MailItem" Then
Set myItem = myInspector.CurrentItem
Set myAttachments = myItem.Attachments
'Prompt the user for confirmation
Dim strPrompt As String
strPrompt = "Are you sure you want to save the first attachment " & _
"in the current item to the Documents folder? If a file with the " & _
"same name already exists in the destination folder, " & _
"it will be overwritten with this copy of the file."
If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then
myAttachments.Item(1).SaveAsFile Environ("HOMEPATH") & "\My Documents\" & _
myAttachments.Item(1).DisplayName
End If
Else
MsgBox "The item is of the wrong type."
End If
End If
End Sub
那是一个RTF信息吗?RTF信息嵌入的图像和对象(如Excel电子表格)不是作为文件,而是作为OLE对象,并且 Attachment.SaveAsFile
会导致OLE附件失败。如果你想过滤掉这样的附件,请确保你跳过带有 Attachment.Type = olOLE (6)
或只处理类型为 olByValue
或 olEmbeddeditem
.
如果您仍然需要保存OLE附件,您可以使用 赎回 - 其 RDOAttachment.SaveAsFile
该方法将从最常见的OLE附件(如Word文档、PDF文件、Excel电子表格、图像等)中提取文件数据。