【问题标题】:Export Outlook 2013 Search Folders emails to Excel将 Outlook 2013 搜索文件夹电子邮件导出到 Excel
【发布时间】:2015-07-21 12:17:26
【问题描述】:

我想将我在搜索文件夹中的电子邮件导出到 Excel

我正在使用下面的代码将我的电子邮件导出到收件箱中。

但是使用搜索文件夹它给了我一个错误:

运行时错误'-2147221233 (8004010f)

尝试的操作失败。找不到对象。

Sub Download_Outlook_Mail_To_Excel()

Dim folders As Outlook.folders
Dim folder As Outlook.MAPIFolder
Dim iRow As Integer
Dim Pst_Folder_Name
Dim MailboxName

MailboxName = "xxx@yy.com"
Pst_Folder_Name = "Inbox"

Set folder = Outlook.Session.folders(MailboxName).folders(Pst_Folder_Name)

Sheets(1).Activate

For iRow = 1 To folder.Items.Count
    Sheets(1).Cells(iRow, 1).Select
    Sheets(1).Cells(iRow, 1) = folder.Items.Item(iRow).SenderName
    Sheets(1).Cells(iRow, 2) = folder.Items.Item(iRow).Subject
    Sheets(1).Cells(iRow, 3) = folder.Items.Item(iRow).ReceivedTime
    Sheets(1).Cells(iRow, 4) = folder.Items.Item(iRow).Categories
Next iRow

MsgBox "Outlook Mails Extracted to Excel"

End Sub

【问题讨论】:

  • 您收到的错误信息是什么?
  • 尝试操作失败。找不到对象
  • 运行时错误'-2147221233 (8004010f)'
  • 你用的是什么参考?
  • Microsoft Outlook 15.0 对象库、Microsoft Office 15.0 对象库、Microsoft Excel 15.0 对象库、Visual Basic for Applications

标签: vba excel outlook


【解决方案1】:

我终于找到了解决办法。它仅适用于一个指定的搜索文件夹,在变量中命名:Pst_Folder_Name。如果您有更多搜索文件夹,则必须以某种方式使用循环。

Sub Outlook_Emails_Handled_Last_Week()
    Dim colStores As Outlook.Stores
    Dim oStore As Outlook.Store
    Dim oSearchFolders As Outlook.folders
    Dim oFolder As Outlook.folder
    Dim mail As Outlook.MailItem
    Dim iRow As Integer
    Dim Pst_Folder_Name
    Dim MailboxName
    Dim Ws As Excel.Worksheet
    Dim LastRow As Integer

    MailboxName = "xxxx@yyy.com"
    Pst_Folder_Name = "Emails Handled Last Week"

    Set oFolder = Session.Stores.Item(MailboxName).GetSearchFolders(Pst_Folder_Name)

    Set Ws = ThisWorkbook.Worksheets("Sheet1")
    Ws.Activate

    LastRow = Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row

        Ws.Cells(1, 1).Value = "Sender Name"
        Ws.Cells(1, 2).Value = "Subject"
        Ws.Cells(1, 3).Value = "Received Time"
        Ws.Cells(1, 4).Value = "Categories"

    For iRow = 1 To oFolder.Items.Count
        Ws.Cells(LastRow + iRow, 1) = oFolder.Items.Item(iRow).SenderName
        Ws.Cells(LastRow + iRow, 2) = oFolder.Items.Item(iRow).Subject
        Ws.Cells(LastRow + iRow, 3) = oFolder.Items.Item(iRow).ReceivedTime
        Ws.Cells(LastRow + iRow, 4) = oFolder.Items.Item(iRow).Categories

    Next iRow

    MsgBox "Completed!"

    End Sub

【讨论】:

    【解决方案2】:

    由于搜索文件夹可以预先分配或自定义,检测它们的最佳方法是检查文件夹的.Class,它应该是olSearch

    所以这应该可以工作(如果有多个搜索文件夹,我添加了一个新整数以继续写入):

    Sub Download_Outlook_Mail_To_Excel()
    
    Dim folder As Outlook.MAPIFolder
    Dim iRow As Integer
    Dim LastWrow As Integer
    Dim MailboxName As String
    Dim Ws As Excel.Worksheet
    
    MailboxName = "xxyy@zzz.com"
    Set Ws = sheets(1)
    
    For Each folder In Outlook.Session.folders(MailboxName).folders
        With folder
            If .Class <> olSearch Then
            Else
                Ws.Activate
                LastWrow = Ws.Range("A" & Ws.rows.Count).End(xlup).Row
                For iRow = 1 To .Items.Count
                    'ws.Cells(iRow, 1).Select
                    Ws.Cells(LastWrow + iRow, 1) = .Items.Item(iRow).SenderName
                    Ws.Cells(LastWrow + iRow, 2) = .Items.Item(iRow).Subject
                    Ws.Cells(LastWrow + iRow, 3) = .Items.Item(iRow).ReceivedTime
                    Ws.Cells(LastWrow + iRow, 4) = .Items.Item(iRow).Categories
                Next iRow
            End If
        End With
    Next folder
    
    MsgBox "Outlook Mails Extracted to Excel"
    
    End Sub
    

    【讨论】:

    • 谢谢。如果我在搜索文件夹中有子文件夹怎么办?
    • 好问题...如果他们的类型不是olSearch,我会说最好的方法是循环这个For Each folder2 in folder.folders,如果需要的话进行错误处理!
    • 就我而言,我有 10 个不同的子文件夹,具体取决于当年处理电子邮件的人。 (子文件夹名称 = 员工姓名)
    • 好的,你能自己处理在子文件夹上添加循环吗?
    • 我不像你那么专业。你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多