2015-09-08 62 views
1

我需要(通过9000个电子邮件)有没有办法在VBA中使用Items.find()从Outlook中提取某些文本?

我想提取大量从Outlook特定的文本会是这样的工作

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多年,我需要时试图为我的工作创建这样的系统,这样我就可以从电子邮件正文中提取所需的信息,而不是单独扫描数千封电子邮件。

有谁知道一些很好的源代码/教程,我可以看看?因为每一个保持领先我回到同一个地方

三江源

回答

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

0

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

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

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

Application.ActiveExplorer.CurrentFolder.GetTable(myFilter)

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

相关问题