Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba Outlook无法对此类型的附件执行此操作_Vba_Outlook - Fatal编程技术网

Vba Outlook无法对此类型的附件执行此操作

Vba Outlook无法对此类型的附件执行此操作,vba,outlook,Vba,Outlook,我正在尝试保存电子邮件中的附件。我收到了错误信息 Outlook无法对此类型的附件执行此操作 它正在使用Debug.Print outAttachment,试图提取图片(与设备无关的位图)。 我只需要提取Excel和pdf,但如果这意味着代码有效,我不介意提取图片 Public-Sub-Extract\u-Attachments\u-From\u-Outlook\u-Msg\u-Files() Dim outApp作为对象 将邮件设置为对象 作为对象的附件 将msgFiles设置为字符串,将so

我正在尝试保存电子邮件中的附件。我收到了错误信息

Outlook无法对此类型的附件执行此操作

它正在使用Debug.Print outAttachment,试图提取图片(与设备无关的位图)。
我只需要提取Excel和pdf,但如果这意味着代码有效,我不介意提取图片

Public-Sub-Extract\u-Attachments\u-From\u-Outlook\u-Msg\u-Files()
Dim outApp作为对象
将邮件设置为对象
作为对象的附件
将msgFiles设置为字符串,将sourceFolder设置为字符串,将saveInFolder设置为字符串
将文件名设置为字符串
将文件路径设置为字符串
Application.DisplayAlerts=False
msgFiles=Sheets(“Instructions”).Range(“H1”)和Sheets(“Instructions”).Range(“H2”)和.msg“'文件夹位置和.msg文件的filespec”
调试。打印msgFiles
saveInFolder=Sheets(“Instructions”).Range(“H1”)文件夹,用于保存提取的附件
Debug.Print保存文件夹
如果正确(saveInFolder,1)“\”则saveInFolder=saveInFolder&“\”
sourceFolder=Left(msgFiles,InStrRev(msgFiles,“\”))
调试。打印源文件夹
出错时继续下一步
Set-outApp=GetObject(,“Outlook.Application”)
如果outApp什么都不是,那么
MsgBox“Outlook未打开”
出口接头
如果结束
错误转到0
fileName=Dir(msgFiles)
而文件名为vbNullString
设置outEmail=outApp.Session.OpenSharedItem(sourceFolder&fileName)
对于outEmail.Attachments中的每个outAttachment
outAttachment.SaveAsFile saveInFolder&outAttachment.fileName
下一个
fileName=Dir
温德
端接头

这是一条带有嵌入式OLE对象的RT格式消息,对吗? Outlook对象模型不允许处理该类型的附件(Attachment.type==olOLE)

如果使用是一个选项,则其.SaveAsFile方法足够智能,可以从存储器中提取BMP、EMF、PDF、Excel等文件数据。类似以下内容(在我的脑海中)应该可以完成这项工作:

  set Session = CreateObject("Redemption.RDOSession")
  set outEmail= Session.GetMessageFromMsgFile(sourceFolder & fileName)
  For Each outAttachment In outEmail.Attachments
      outAttachment.SaveAsFile saveInFolder & outAttachment.fileName
  Next

它是什么类型的附件?pdf和excel文件!都在同一封邮件上?请检查此处:并搜索
Ishiddenatachment
功能。我没有看到这一点,但显然有些附件是“隐藏的”“导出时需要跳过。使用错误处理如何?如果引发了该特定错误,则下一步继续?谢谢Dmitry。”。我发现ActiveX组件无法在设置的会话行上创建对象。你下载并安装了Redemption吗?我的公司不允许。那时你做不了什么。您可以尝试使用扩展MAPI来提取附件数据,但这需要C++或Delphi。请注意,您不需要“;安装Redemption不需要管理员权限-您可以将dll复制到任何文件夹,并使用regsvr32.exe进行注册;它将很高兴在香港大学安装自己。