【发布时间】:2016-05-23 18:57:06
【问题描述】:
我有一个相当直接的场景,我每天都会收到一封附有 zip 文件的电子邮件,我希望能够更轻松地解析这些信息。为此,我只需要将附件下载到文件夹中,然后解压缩即可。
要下载附件,我做了以下操作
Public Sub SaveZip(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "c:\temp\"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
Set objAtt = Nothing
Next
End Sub
这按预期工作,.zip 文件被转储到临时目录中。我发现以下代码似乎是我需要实现以提取 .zip
Set oApp = CreateObject("Shell.Application")
oApp.NameSpace(saveFolder).CopyHere oApp.NameSpace.Items
在不产生大量错误的情况下,我无法在现有代码中实现这一点(我敢肯定,由于我自己缺乏理解)
对此的任何意见将不胜感激
最终编辑
知道了,感谢蒂姆的所有帮助。下面将从收到的电子邮件中下载附件(始终命名相同)到 c:\temp,将它们解压缩到 c:\temp\unzipped,重命名文件,最后删除 c:\temp 中的 .zip。
Public Sub SaveZip(itm As Outlook.MailItem)
Const saveFolder = "C:\Temp\"
Const fileFolder = "C:\CBH\"
Dim objAtt As Outlook.Attachment
Dim oApp As Object
Dim dName As Variant
For Each objAtt In itm.Attachments
dName = objAtt.DisplayName
objAtt.SaveAsFile saveFolder & dName
Set oApp = CreateObject("Shell.Application")
oApp.NameSpace("C:\CBH").CopyHere _
oApp.NameSpace(saveFolder & dName).Items
Name fileFolder & "CallsByHour.xls" As fileFolder & "CBH-" & Format(Date, "yyyymmdd") & ".xls"
Kill saveFolder & dName
Next
End Sub
【问题讨论】:
-
Dim saveFolder:删除As String,如此处所述rondebruin.nl/win/s7/win002.htm -
-
您需要将完整路径传递给 zip 存档
... oApp.NameSpace(fullZipPathGoesHere).Items该路径也应该是 Variant。 -
我继续将路径变量 (saveFolder) 放在那里,而不是出现错误,什么也没有发生。我假设这是因为我需要在路径中包含一个文件名?
-
是的 - 您需要包含 zip 文件名的完整路径。将有助于使用当前版本的代码更新您的问题。