解压缩附件 - 运行时错误' 91'

时间:2015-06-11 16:33:06

标签: vba outlook outlook-vba

我在另一个网站上找到了这个代码。它应该在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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

确保电子邮件收件箱中的子文件夹(“图书”)存在& “\ 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

答案 2 :(得分:0)

我不得不改变

DIm oAPP as Object

Dim oApp as Shell

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