使用 VBA Excel 下载所有附件或 Outlook 中的最新附件[重复]

问题描述 投票:0回答:2

我收到错误:

运行时错误'-2147221233 (8004010f)';
尝试的操作失败。找不到对象。

在这行代码中

Set objFolder = objNamespace.Folders("Inbox").Folders(strFolderName)

我正在尝试将所有附件从文件夹下载到我指定的路径。

这是我的代码:

Sub OLDownloader()
    
    Dim objOutlook  As Outlook.Application
    Dim objNamespace As Outlook.Namespace
    Dim objFolder   As Outlook.Folder
    Dim objItem     As Object
    Dim objAttachment As Outlook.Attachment
    Dim strFolderName As String
    Dim strSaveFolder As String
    Dim Answer      As String
    
    Set objOutlook = Outlook.Application
    Set objNamespace = objOutlook.GetNamespace("MAPI")
    strFolderName = "Specials"
    strSaveFolder = "C:\Users\Folder"
    
    Set objFolder = objNamespace.Folders("Inbox").Folders(strFolderName)
    
    Answer = MsgBox("Do you want to download the latest file?", vbYesNo, "Downloader")
    
    If Answer = vbYes Then
        Set objItem = objFolder.Items.GetLast
        
        For Each objAttachment In objItem.Attachments
            ' Save the attachment to the specified folder
            objAttachment.SaveAsFile strSaveFolder & objAttachment.Filename
        Next objAttachment
    Else
        For Each objItem In objFolder.Items
            For Each objAttachment In objItem.Attachments
                ' Save the attachment to the specified folder
                objAttachment.SaveAsFile strSaveFolder & objAttachment.Filename
            Next objAttachment
        Next objItem
    End If
    
End Sub

我尝试重命名 Outlook 中的文件夹,为此创建了新文件夹。
将字符串更改为变量。

excel vba outlook
2个回答
0
投票

而不是使用以下代码行:

Set objFolder = objNamespace.Folders("Inbox").Folders(strFolderName) 

要获取 Outlook 中的任何标准文件夹(如

Inbox
),您需要使用 Namespace 类的
GetDefaultFolder
方法:

objNamespace.GetDefaultFolder(olFolderInbox).Folders(strFolderName)

注意,任何子文件夹可能不存在,因此我建议迭代所有子文件夹并检查 Name 属性以确保其存在。如果该文件夹不存在,您可以考虑使用 Folders.Add 方法创建它。

我还注意到以下代码行,您将在其中迭代文件夹中的所有项目并尝试保存附加文件(如果有):

For Each objItem In objFolder.Items
            For Each objAttachment In objItem.Attachments

相反,您需要使用

Find
类的
FindNext
/
Restrict
Items
方法来仅获取具有附加文件的项目,因此您不必迭代文件夹中的所有项目。


0
投票

要获取

Inbox
文件夹,您应该使用:

Set objFolder = objOutlook.Session.GetDefaultFolder(olFolderInbox)
© www.soinside.com 2019 - 2024. All rights reserved.