【问题标题】:How to extract Outlook email data based on subject of the email using VBA?如何使用 VBA 根据电子邮件主题提取 Outlook 电子邮件数据?
【发布时间】: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。第二种方法是通过按下按钮来按需运行宏并执行您想要的操作。如果有不同的主题需要处理并且您选择第二种方式,您可能需要创建几个按钮。
  • 我当然可以试试。谢谢!但是有没有办法只使用一个宏并过滤电子邮件的主题,然后从中提取数据?

标签: excel vba outlook


【解决方案1】:

如果您想处理收到的电子邮件,请查看我在上面评论中的网站链接。

如果你想处理当前项目,有几种方法可以做到。这是我最近发现的一种方法,它很棒,我正在使用它!点击here进入网站。

我已根据您的需要进行了修改。如果你有不同的主题,确定要提取的内容也会不同,因此它会检查当前项目并根据主题运行特定的宏。

将代码粘贴到 ThisOutlookSession 模块中

Private WithEvents m_Inspectors As Outlook.Inspectors
Private WithEvents m_Inspector As Outlook.Inspector
  
Private Sub Application_Startup()
 Set m_Inspectors = Application.Inspectors
End Sub
  
Private Sub m_Inspectors_NewInspector(ByVal Inspector As Outlook.Inspector)
 If TypeOf Inspector.currentItem Is Outlook.MailItem Then
  'Handle emails only
  Set m_Inspector = Inspector
 End If
End Sub
  
Private Sub m_Inspector_Activate()
    Dim Item As MailItem
    
    If TypeOf m_Inspector.currentItem Is MailItem Then
        Set Item = m_Inspector.currentItem
        
        With Item
            ' Display mail
            '.Display
            
            ' Mails with filled opions
            Select Case .subject
                Case "mySubject_01"
                    Call Macro_01
                    
                Case "mySubject_02"
                    Call Macro_02
                    
                Case "mySubject_03"
                    Call Macro_03
            End Select
            
            Set Item = Nothing
        End With
    End If
End Sub

【讨论】:

  • 谢谢你的代码!每当我收到带有特定主题的电子邮件时,这都会运行?
  • 如果我不想在每次收到电子邮件时都运行代码怎么办?假设我有 10 封主题为“卷数据”的电子邮件。所有这些电子邮件都有表格形式的信息,我想从这 10 封电子邮件中提取这些数据,以便进行分析。所以现在我拥有的代码可以完成工作,但唯一的事情是它不是基于电子邮件主题行的循环。如何在我上面提供的代码中给出该条件,即数据应从我的收件箱中的主题行为“卷数据”的电子邮件中提取。?
  • 看看这个link。它显示了两个示例如何Work with all items in any folderWork with Selected items in any folder
  • 好的,谢谢。我去看看。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2015-07-09
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多