保存电子邮件附件时出现运行时错误 '91
Posted
技术标签:
【中文标题】保存电子邮件附件时出现运行时错误 \'91【英文标题】:Runtime Error '91 when saving email attachments保存电子邮件附件时出现运行时错误 '91 【发布时间】:2020-05-29 17:34:44 【问题描述】:我们使用共享的 Outlook 邮箱,我们需要保存该电子邮件中的一些附件。
我需要宏来:
允许用户选择多封电子邮件并保存选择中的所有附件 允许用户选择保存附件的文件夹(每次都不一样) 将ReceivedTime
添加到文件名中,因为我们会收到一些同名的电子邮件附件,但它们总是在不同的日期收到
不更改原始电子邮件(不要删除附件或在电子邮件中添加注释)
我已经结合了我找到的宏中的不同行。
在两行都有“***”我得到
“运行时错误91:“对象变量或未设置块变量”
我删除了dateFormat
和SaveAs
,但在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的主要内容,如果未能解决你的问题,请参考以下文章
使用 Gmail API 发送大型附件时出现错误 10053
使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”