如何使用VBA将Outlook中指定日期的HTML表格导入excel
我正在尝试将HTML表格从电子邮件导入excel 我无意中发现了一个代码,它将从选定的文件夹中导入所有html表,不过我想添加一个选项来选择指定的日期 在代码中添加了以下行(如果OutlookMail.ReceivedTime>=Range(“Email\u ReciptDate”).Value),但是我得到了一个错误 任何帮助都将不胜感激 VBA非常新如何使用VBA将Outlook中指定日期的HTML表格导入excel,excel,vba,outlook,Excel,Vba,Outlook,我正在尝试将HTML表格从电子邮件导入excel 我无意中发现了一个代码,它将从选定的文件夹中导入所有html表,不过我想添加一个选项来选择指定的日期 在代码中添加了以下行(如果OutlookMail.ReceivedTime>=Range(“Email\u ReciptDate”).Value),但是我得到了一个错误 任何帮助都将不胜感激 VBA非常新 Dim oApp As Outlook.Application Dim oMapi As Outlook.MAPIFolder Dim oMa
Dim oApp As Outlook.Application
Dim oMapi As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
Dim HTMLdoc As MSHTML.HTMLDocument
Dim tables As MSHTML.IHTMLElementCollection
Dim table As MSHTML.HTMLTable
Dim x As Long, y As Long
Dim destCell As Range
With ActiveSheet
Set destCell = .Cells(Rows.Count, "A").End(xlUp)
End With
On Error Resume Next
Set oApp = GetObject(, "OUTLOOK.APPLICATION")
If oApp Is Nothing Then Set oApp = CreateObject("OUTLOOK.APPLICATION")
On Error GoTo 0
Set oMapi = oApp.GetNamespace("MAPI").PickFolder
If Not oMapi Is Nothing Then
For Each oMail In oMapi.Items
If OutlookMail.ReceivedTime >= Range("Email_ReciptDate").Value Then
'Get HTML tables from email object
Set HTMLdoc = New MSHTML.HTMLDocument
With HTMLdoc
.Body.innerHTML = oMail.HTMLBody
Set tables = .getElementsByTagName("table")
End With
'Import each table into Excel
For Each table In tables
For x = 0 To table.Rows.Length - 1
For y = 0 To table.Rows(x).Cells.Length - 1
destCell.Offset(x, y).Value = table.Rows(x).Cells(y).innerText
Next y
Next x
Set destCell = destCell.Offset(x)
Next
End If
Next
MsgBox "Finished"
End If
Set oApp = Nothing
Set oMapi = Nothing
Set oMail = Nothing
Set HTMLdoc = Nothing
Set tables = Nothing
迭代文件夹中的所有项并检查特定项是否与代码中的条件相对应不是一个好主意!相反,我建议使用
Items
类的方法。例如:
Public Sub ContactDateCheck()
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myNamespace = Application.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts.Restrict("[LastModificationTime] > '01/1/2021'")
For Each myItem In myItems
If (myItem.Class = olContact) Then
MsgBox myItem.FullName & ": " & myItem.LastModificationTime
End If
Next
End Sub
请在以下文章中阅读有关这些方法的更多信息:
应用程序
类的方法很有用。在Outlook中使用AdvancedSearch
方法的主要好处是:
- 搜索在另一个线程中执行。您不需要手动运行另一个线程,因为
方法会在后台自动运行它AdvancedSearch
- 可以在任何位置搜索任何项目类型:邮件、约会、日历、备注等,即超出特定文件夹的范围。
和Restrict
/Find
方法可应用于特定的FindNext
集合(请参阅Outlook中项目
类的文件夹
属性)项目
- 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN中的文章中阅读更多有关这方面的内容。为了提高搜索性能,如果为存储启用了即时搜索,则可以使用即时搜索关键字(请参见
类的存储
属性)IsInstantSearchEnabled
- 您可以使用
类的search
方法随时停止搜索过程stop
有关更多信息和示例代码,请参见。请更清楚地说明您希望实现的修改类型。基本上,我试图实现的是能够将两封电子邮件中的HTML正文合并到一封电子邮件中。然后发送出去。然而,这似乎只是将HTML内部文本提取到excel中。有没有一种方法可以简单地从两封电子邮件中抓取HTML表并将它们合并为1(保留原始表格式)