有没有办法在VBA中使用Items.find()从Outlook中提取某些文本?

时间:2015-09-08 09:14:45

标签: excel vba excel-vba outlook

我需要从Outlook批量提取特定文本(通过9000封电子邮件)

我想知道会不会有这样的工作

Dim Folder as Outlook.MAPIFolder
Dim sFolders As Outlook.MAPIFolder
Dim iRow As Integer, oRow As Integer
Dim MailBoxName As String, Pst_Folder_Name  As String, Destination As String

ThisWorkbook.sheets(1).Cells(1,1) = "Destinations"

For iRow = 1 To Folder.Items.Count

ThisWorkbook.Sheets(1).Cells(oRow, 1) = Folder.Items.Find(Destination)

我几年前在VBA方面只有一些经验,我需要尝试为我的工作创建这样的系统,这样我就可以从电子邮件正文中提取所需的信息,而不是分别扫描成千上万的电子邮件。 / p>

有谁知道我可以看到的一些好的资源/教程?每个人都让我回到同一个地方

三江源

2 个答案:

答案 0 :(得分:0)

这是你正在尝试的(在Outlook中测试)?请修改它以从MS-Excel运行。

Sub Sample()
    Dim myFilter As String, SearchString As String
    Dim OutlookTable As Table
    Dim OutlookRow As Row

    '~~> This is your search string. Change as applicable
    SearchString = "Siddharth"

    '~~> Create Query
    myFilter = "@SQL=" & _
               Chr(34) & _
               "urn:schemas:httpmail:textdescription" & _
               Chr(34) & _
               " ci_phrasematch '" & _
               SearchString & _
               "'"

    Set OutlookTable = Application.ActiveExplorer.CurrentFolder.GetTable(myFilter)

    Do Until OutlookTable.EndOfTable
        Set OutlookRow = OutlookTable.GetNextRow

        '~~> Print Subject (For example) of that email
        '~~> which has the search string
        Debug.Print OutlookRow("Subject")
    Loop
End Sub
  

有谁知道我可以看到的一些好的资源/教程?

教程:请参阅此MSKB Article

答案 1 :(得分:0)

Outlook对象模型提供了Find / FindNextRestrictGetTableAdvancedSearch方法,用于过滤Outlook中的项目。我建议在你的情况下使用Restrict方法。如果项目数量较少,则FindFindNext方法比过滤更快。如果集合中有大量项目,Restrict方法会明显加快,特别是如果预计只能找到大集合中的少数项目。

您可以阅读以下内容并在以下文章中找到示例代码:

The Filtering Items section in MSDN深入介绍了所有可能的方法。

  

Application.ActiveExplorer.CurrentFolder.GetTable(myFilter)

不要在单行代码中使用多个点。它可能会给您的代码带来另一个问题。我总是建议打破链属性和方法调用,并在不同的代码行上声明它们。因此,您将能够在调试器下看到每个属性和方法返回的内容,并轻松找到问题的原因(如果有的话)。