我需要从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>
有谁知道我可以看到的一些好的资源/教程?每个人都让我回到同一个地方
三江源
答案 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 / FindNext,Restrict,GetTable
和AdvancedSearch方法,用于过滤Outlook中的项目。我建议在你的情况下使用Restrict
方法。如果项目数量较少,则Find
或FindNext
方法比过滤更快。如果集合中有大量项目,Restrict
方法会明显加快,特别是如果预计只能找到大集合中的少数项目。
您可以阅读以下内容并在以下文章中找到示例代码:
The Filtering Items section in MSDN深入介绍了所有可能的方法。
Application.ActiveExplorer.CurrentFolder.GetTable(myFilter)
不要在单行代码中使用多个点。它可能会给您的代码带来另一个问题。我总是建议打破链属性和方法调用,并在不同的代码行上声明它们。因此,您将能够在调试器下看到每个属性和方法返回的内容,并轻松找到问题的原因(如果有的话)。