【发布时间】:2022-03-02 14:43:31
【问题描述】:
我有从 Outlook 电子邮件中提取表格的 VBA 代码。
我在“收件箱”下有一个子文件夹,所有类似的邮件都在其中。
我想根据电子邮件的主题提取数据,而不是为该特定电子邮件设置专用子文件夹。
代码如下。
Option Explicit
Sub ImportTable()
Cells.Clear
Dim OLApp As Outlook.Application
'Set OA = CreateObject("Outlook.Application")
Set OLApp = New Outlook.Application
Dim ONS As Outlook.Namespace
Set ONS = OLApp.GetNamespace("MAPI")
Dim myFolder As Outlook.Folder
Set myFolder = ONS.Folders("emailaddress").Folders("Inbox")
Set myFolder = myFolder.Folders("Others")
Dim OLMAIL As Outlook.MailItem
Set OLMAIL = OLApp.CreateItem(olMailItem)
For Each OLMAIL In myFolder.Items
Dim oHTML As MSHTML.HTMLDocument
Set oHTML = New MSHTML.HTMLDocument
Dim oElColl As MSHTML.IHTMLElementCollection
With oHTML
.Body.innerHTML = OLMAIL.HTMLBody
Set oElColl = .getElementsByTagName("table")
End With
Dim t As Long, r As Long, c As Long
Dim eRow As Long
For t = 0 To oElColl.Length - 1
eRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
For r = 0 To (oElColl(t).Rows.Length - 1)
For c = 0 To (oElColl(t).Rows(r).Cells.Length - 1)
Range("A" & eRow).Offset(r, c).Value = oElColl(t).Rows(r).Cells(c).innerText
Next c
Next r
eRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Next t
'Cells(eRow, 1) = "Sender's Name:" & " " & OLMAIL.Sender
'Cells(eRow, 1).Interior.Color = vbRed
'Cells(eRow, 1).Font.Color = vbWhite
Cells(eRow, 1) = "Date & Time of Receipt:" & " " & OLMAIL.ReceivedTime
Cells(eRow, 1).Interior.Color = vbRed
Cells(eRow, 1).Font.Color = vbWhite
Cells(eRow, 1).Columns.AutoFit
Next OLMAIL
Range("A1").Select
Set OLApp = Nothing
Set OLMAIL = Nothing
Set oHTML = Nothing
Set oElColl = Nothing
On Error Resume Next
Range("A1:A" & Worksheets(1).UsedRange.Rows.Count).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
End Sub
【问题讨论】:
-
你说
I have a VBA script that extracts tables from outlook emails.这些邮件是怎么处理的?他们进入收件箱并且宏自动运行?当您选择或打开它并通过按按钮运行宏时?更具体地说明您实际处理邮件的方式以及您希望如何处理。 -
现在,只要我想将数据从电子邮件中提取到 excel 文件中,我就会手动运行宏。我正在寻找的是如何根据电子邮件的“主题”过滤电子邮件,根据特定主题循环浏览邮件并仅从这些电子邮件中提取数据。
-
我相信至少有两种方法可以解决您的问题。第一个,进入收件箱或任何其他文件夹的每封邮件都可以自动管理,并按照您的要求执行。对于这种方法,请查看website。第二种方法是通过按下按钮来按需运行宏并执行您想要的操作。如果有不同的主题需要处理并且您选择第二种方式,您可能需要创建几个按钮。
-
我当然可以试试。谢谢!但是有没有办法只使用一个宏并过滤电子邮件的主题,然后从中提取数据?