【问题标题】:Code to download attachment from Outlook, save it on desktop and open it从 Outlook 下载附件的代码,将其保存在桌面上并打开它
【发布时间】:2015-04-28 17:35:19
【问题描述】:

这是 Outlook 中的代码,它在 Outlook 中自动设置规则以保存带有日期戳的附件 (Excel):

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

    dateFormat = Format(Now, "yyyy-mm-dd H-mm")
    saveFolder = "c:\Users\abc1\Desktop\"
   For Each objAtt In itm.Attachments
      objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
      Set objAtt = Nothing
 Next

End Sub

我想要的下一步是在附件保存后打开它。这可能吗?

这个怎么样?

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

      dateFormat = Format(Now, "yyyy-mm-dd H-mm")
      saveFolder = "c:\Users\abc1\Desktop\"
     For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
        Set objAtt = Nothing
   Next


Dim Shex As Object
   Set Shex = CreateObject("Shell.Application")
   tgtfile = "objatt"
   Shex.Open (tgtfile)

结束子

【问题讨论】:

  • 它保存到我的桌面并且一直运行良好。我需要在我的桌面上打开它。有可能吗?
  • 您可以使用此处的代码在其默认应用程序中打开任何文档:stackoverflow.com/questions/18921168/…
  • 哪一个?创建对象然后寻找 tgtfile?我将如何定义文档名称 - 每次下载都会有所不同。
  • 是的 - runit 得到 5 票的回答。将完整的文件路径保存到一个变量并传递给runit
  • 这是在 Excel 还是 Outlook 中?不明白。

标签: excel vba outlook outlook-2010


【解决方案1】:

是的,这是可能的。如果您确切知道需要打开 Excel 文件,则可以使用 Excel 对象模型来完成工作。请参阅How to automate Microsoft Excel from Visual Basic 了解更多信息。 Workbooks 类的Open 方法打开一个工作簿。

【讨论】:

  • 创建类似 excel.application 的应用程序?
  • 是的,完全正确。您需要创建一个新的 Excel 应用程序实例,然后在那里加载文件。
  • 我的文件将被保存为不同的命名文件,因为它的日期/时间戳每次都会不同。
  • 但是你在运行时知道文件名,所以你可以用它在 Excel 中打开文件。
  • 由于日期的变化每次文件将以不同的名称保存。每次我如何为不同的文件调用它?
【解决方案2】:

试试这个:

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)

    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    Dim dateFormat, FilePath As String

    dateFormat = Format(Now, "yyyy-mm-dd H-mm")
    saveFolder = "c:\Users\abc1\Desktop" '<<EDIT removed trailing \
    For Each objAtt In itm.Attachments
      FilePath = saveFolder & "\" & dateFormat & _
                  " " & objAtt.DisplayName
      objAtt.SaveAsFile FilePath
      runit FilePath
    Next

End Sub

Sub runit(FilePath as String)
   Dim Shex As Object
   Set Shex = CreateObject("Shell.Application")
   Shex.Open (FilePath)
End Sub

'Edit: I used this to test the code, since I'm not running
'      it from a rule
Sub Tester()

    Dim Msg As MailItem

    Set Msg = Application.ActiveInspector.CurrentItem

    saveAttachtoDisk Msg

End Sub

【讨论】:

  • 我第一次尝试时把我踢了出去,操作失败了。下一次试用,它成功了。虽然没有运行“runit”代码。因为我可以为传入的电子邮件设置 1 条规则。我认为没有办法创建多个规则。有吗?
  • 您的原始代码中有一个我没有发现的错误(在saveFolder 上添加一个额外的反斜杠,它已经有一个尾部反斜杠)。尝试修复。
  • 所以代码确实可以使用附加的反斜杠,但不幸的是它打开了错误的附件:) 例如,我附加了一个 excel 文件,但它在桌面上打开了一个图像。以前没见过。
  • 如果您的邮件中嵌入了图片,那么这些图片也会被保存并打开。如果您不希望这样,那么您需要添加一些代码来过滤掉它们,也许是通过查看文件名并检查扩展名。
猜你喜欢
  • 2012-07-31
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多