保存电子邮件附件时出现运行时错误 '91

Posted

技术标签:

【中文标题】保存电子邮件附件时出现运行时错误 \'91【英文标题】:Runtime Error '91 when saving email attachments保存电子邮件附件时出现运行时错误 '91 【发布时间】:2020-05-29 17:34:44 【问题描述】:

我们使用共享的 Outlook 邮箱,我们需要保存该电子邮件中的一些附件。

我需要宏来:

允许用户选择多封电子邮件并保存选择中的所有附件 允许用户选择保存附件的文件夹(每次都不一样) 将ReceivedTime 添加到文件名中,因为我们会收到一些同名的电子邮件附件,但它们总是在不同的日期收到 不更改原始电子邮件(不要删除附件或在电子邮件中添加注释)

我已经结合了我找到的宏中的不同行。

在两行都有“***”我得到

“运行时错误91:“对象变量或未设置块变量”

我删除了dateFormatSaveAs,但在SaveAs 行上仍然出现运行时错误。

Sub saveAttachment()
    Dim objOL As Outlook.Application
    Dim objMsg As Outlook.MailItem
    Dim objAtt As Outlook.Attachment
    Dim objSel As Outlook.Selection
    Dim lngCount As Long
    Dim sFolder As String
    Dim dateFormat As String

    dateFormat = Format(objMsg.ReceivedTime, "yyyy-mm-dd")  '***

    Dim xlObj As Excel.Application
    Set xlObj = New Excel.Application
    ' Open the select folder prompt
    With xlObj.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' if OK is pressed
            sFolder = .SelectedItems(1)
        ElseIf .Show = 0 Then
            MsgBox "Failed to select folder to save attachements to"
        Exit Sub
        End If
    End With
    xlObj.Quit
    Set xlObj = Nothing
    Set objOL = CreateObject("Outlook.Application")
    Set objSelection = objOL.ActiveExplorer.Selection
    For Each objMsg In objSelection
        Set objAttachments = objMsg.Attachments
        lngCount = objAttachments.Count
        If lngCount > 0 Then
            objAtt.SaveAsFile sFolder & "\" & objAtt.FileName & dateFormat '***
        Else
            MsgBox "No attachements selected"
        End If
    Next
End Sub

我们正在使用 Office365。

【问题讨论】:

您好,dateFormat = Format(objMsg.ReceivedTime, "yyyy-mm-dd") 您正在尝试在分配 objMsg 之前访问它.如果将此代码移动到下面的循环中,它应该可以工作。 objAtt.SaveAsFile sFolder & "\" & objAtt.FileName & dateFormat 同样的问题:objAtt 从未被分配。您首先必须循环 objAttachments 并对每个附件执行操作。 【参考方案1】:

首先,您需要将Format 方法放在可以访问和实例化邮件项的循环中。然后您需要确保文件路径有效并且文件名中没有使用禁止符号。

Set objOL = CreateObject("Outlook.Application")
Set objSelection = objOL.ActiveExplorer.Selection
For Each objMsg In objSelection
    Set objAttachments = objMsg.Attachments
    lngCount = objAttachments.Count
    If lngCount > 0 Then
      dateFormat = Format(objMsg.ReceivedTime, "yyyy-mm-dd")
      objAtt.SaveAsFile sFolder & "\" & objAtt.FileName & dateFormat
    Else
      MsgBox "No attachements selected"
    End If
Next

Getting started with VBA in Office 文章可能对您有所帮助。

【讨论】:

现在出现运行时错误“438”:对象不支持此属性或方法。[objAtt.SaveAsFile sFolder & "\" & objAtt.FileName & dateFormat]【参考方案2】:

获得对象后返回对象属性。

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration
' If desperate declare as Variant


Sub saveAttachment()

    Dim objItem As Object
    Dim objAtts As Attachments
    Dim objAtt As Attachment
    Dim objSel As Selection
    
    Dim lngCount As Long
    
    Dim sFolder As String
    
    Dim dateFormat As String
    
    Dim xlObj As Excel.Application
    Set xlObj = New Excel.Application
    ' Open the select folder prompt
    With xlObj.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' if OK is pressed
            sFolder = .SelectedItems(1)
        ElseIf .Show = 0 Then
            MsgBox "Failed to select folder to save attachements to"
            Exit Sub
        End If
    End With
    xlObj.Quit
    Set xlObj = Nothing
    
    ' .Selection allows more than one item
    Set objSel = ActiveExplorer.Selection
    
    For Each objItem In objSel
        
        ' Mailitems only
        If TypeOf objItem Is MailItem Then
        
            dateFormat = Format(objItem.ReceivedTime, "yyyy-mm-dd")
            Set objAtts = objItem.Attachments
            
            lngCount = objAtts.Count
            If lngCount > 0 Then
                For Each objAtt In objAtts
                    Debug.Print sFolder & "\" & dateFormat & objAtt.FileName
                    objAtt.SaveAsFile sFolder & "\" & dateFormat & objAtt.FileName
                Next
            Else
                MsgBox "No attachments in " & objItem.Subject
            End If
            
        End If
    Next
End Sub

【讨论】:

以上是关于保存电子邮件附件时出现运行时错误 '91的主要内容,如果未能解决你的问题,请参考以下文章

尝试保存图像时出现 Android 运行时错误

使用Gmail API时出现BrokenPipeError

使用 Gmail API 发送大型附件时出现错误 10053

使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”

使用 torch.load 时出现运行时错误“存储大小错误:”

打开经常模板时出现运行时错误