【问题标题】:Unzipping attachment - Run-time error '91'解压缩附件 - 运行时错误“91”
【发布时间】:2020-06-24 17:29:32
【问题描述】:

我在另一个网站上找到了此代码。它应该在 Outlook 文件夹中找到一封电子邮件并解压缩附件。它使用一个临时位置来执行此操作。

我正在使用 Outlook 2013,我使用的参考是:Visual Basic for Application、Microsoft Outlook 15.0 对象库、OLE 自动化、Microsoft Office 15.0 对象库。我目前正在一个模块中运行此代码。

Option Explicit
Sub Unzip1()
    Dim Inbox As MAPIFolder
    Dim SubFolder As MAPIFolder
    Dim Atchmt As Attachment
    Dim FileName As String
    Dim msg As Outlook.MailItem
    Dim ns As Outlook.NameSpace '
    Dim FSO As Object               'variables for unzipping
    Dim oApp As Object
    Dim FileNameFolder As Variant

    Set ns = GetNamespace("MAPI")
    Set Inbox = ns.GetDefaultFolder(olFolderInbox)
    Set SubFolder = Inbox.Folders("ASE")

    For Each msg In SubFolder.Items
        For Each Atchmt In msg.Attachments
            If (Right(Atchmt.FileName, 3) = "zip") Then
                FileNameFolder = Environ("USERPROFILE") & "Documents\"
                Set oApp = CreateObject("Shell.Application")
                oApp.NameSpace(FileNameFolder).CopyHere oApp.NameSpace(Atchmt.FileName).Items
            End If
        Next
    Next
End Sub

我在这一行收到错误“对象变量或未设置块变量”。

oApp.NameSpace(FileNameFolder).CopyHere oApp.NameSpace(Atchmt.FileName).Items

【问题讨论】:

  • 你在FileNameFolder = Environ("USERPROFILE") & "Documents\"之后失踪的Atchmt.SaveAsFile FileNameFolder

标签: vba outlook


【解决方案1】:

我不得不改变

DIm oAPP as Object

Dim oApp as Shell

使用“Microsoft Shell 控件和自动化”进行早期绑定。不知道为什么它抱怨后期绑定

【讨论】:

    【解决方案2】:

    如果我们从 Outlook 对象模式讨论 Namespace 类,它不提供 CopyHere 方法。对象本身提供了登录和注销、通过ID直接访问存储对象、直接访问某些特殊的默认文件夹以及访问其他用户拥有的数据源的方法。使用 GetNamespace("MAPI") 从 Application 对象返回 Outlook NameSpace 对象。

    CopyHere 方法将一个或多个项目复制到文件夹中。要复制的项目应作为参数传递。 这可以是表示文件名、FolderItem 对象或 FolderItems 对象的字符串。 但不能是附件文件名。您需要先将附件保存在磁盘上。

    【讨论】:

      【解决方案3】:

      确保您的电子邮件收件箱中存在子文件夹(“Books”)并且“\Documents\Files\”将保存解压缩文件

      Option Explicit
      Sub Unzip1()
          Dim Inbox As MAPIFolder
          Dim SubFolder As MAPIFolder
          Dim Atchmt As Attachment
          Dim FileName As String
          Dim msg As Outlook.MailItem
          Dim ns As Outlook.NameSpace '
          Dim FSO As Object               'variables for unzipping
          Dim oApp As Object
          Dim FileNameFolder As Variant
      
          Set ns = GetNamespace("MAPI")
          Set Inbox = ns.GetDefaultFolder(olFolderInbox)
          Set SubFolder = Inbox.Folders("Books")
      
          For Each msg In SubFolder.Items
              For Each Atchmt In msg.Attachments
                  If (Right(Atchmt.FileName, 3) = "zip") Then
                      FileNameFolder = Environ("USERPROFILE") & "\Documents\Files\"
                      Atchmt.SaveAsFile FileNameFolder 
                      Set oApp = CreateObject("Shell.Application")
                      oApp.NameSpace(FileNameFolder).CopyHere oApp.NameSpace(Atchmt.FileName).Items
                  End If
              Next
          Next
      End Sub
      

      【讨论】:

      • Omar,现在我在第 16 行收到运行计时器错误“13”。For Each msg In SubFolder.Items我正在模块中运行此代码。
      • @Bigotacon 查看我更新的答案复制代码并运行它,我已经测试并且它可以工作,确保你有正确的文件路径 \Documents\Files\ - 或 - \My Documents\Files`
      • 我不确定我做错了什么。我仍然遇到文件不匹配问题。我现在用原始代码和你改进的代码得到它。我一直在尝试,以便在修复它时可以接受您的回答。谢谢先生。
      • 在我将另一封电子邮件放入 zip 文件夹后,我现在在第 24 行收到我们的老朋友运行时错误。oApp.NameSpace(FileNameFolder).CopyHere oApp.NameSpace(Atchmt.FileName).Items
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2013-04-16
      相关资源
      最近更新 更多