【问题标题】:Extract msg attachments from outlook email从 Outlook 电子邮件中提取 msg 附件
【发布时间】:2011-06-30 11:44:12
【问题描述】:

我有以下 vba 代码,可将附件保存在电子邮件中。

这适用于 .docx、.jpg 等,但我需要使用它来提取多个不起作用的 .msg 附件。

代码是

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String

saveFolder = "C:\Test\"
For Each objAtt In itm.Attachments
stFileName = saveFolder & "\" & objAtt.DisplayName
i = 0
JumpHere:
If Dir(stFileName) = "" Then
objAtt.SaveAsFile stFileName
Else
i = i + 1
stFileName = saveFolder & "\" & i & " - " & objAtt.DisplayName
GoTo JumpHere
End If
Set objAtt = Nothing
Next
End Sub

错误与该行有关 - If Dir(stFileName) = "" Then

【问题讨论】:

  • 真的不应该使用 VBA 中的GoTostatement !这是一个讨论来说明:eggheadcafe.com/software/aspnet/32608532/…
  • 谢谢 - 看起来像是回到了绘图板......
  • @Haribo83:也许我们可以帮助您设计您想要做的事情。你能解释一下这部分代码的目的吗?
  • 我有一个电子邮件备份系统,我需要清除电子邮件。他们这样做的唯一方法是将它们全部作为电子邮件的附件发送,一次 100 个。
  • 然后我想将每个 .msg 附件保存在一个文件中,并使用 Outlook 规则删除电子邮件。这听起来可能吗?

标签: vba outlook email-attachments


【解决方案1】:

在我们聊天之后,这是最终代码:

Public Sub saveAttachtoDisk(itm As Outlook.MailItem) 
Dim objAtt As Outlook.Attachment 
Dim saveFolder As String 
Dim i As Integer 

saveFolder = "C:\Test\" 
For Each objAtt In itm.Attachments 
  stFileName = saveFolder & objAtt.FileName 
  i = 0 
  'Loop to find the first available filename 
  Do While Dir(stFileName) <> "" 
    i = i + 1 
    stFileName = saveFolder & i & " - " & objAtt.FileName 
  Loop
  objAtt.SaveAsFile stFileName 
Next 
End Sub

问候,

最大

【讨论】:

  • +1 但请注意 While...Wend 已弃用。 VBA 帮助:“Do...Loop 语句提供了一种更结构化和更灵活的方式来执行循环。”要“模拟”While...Wend,请使用 Do While...Loop
  • 感谢 Jean-François 向我指出。我会编辑我的帖子以更正它。
猜你喜欢
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2018-07-25
  • 2015-07-09
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多