在 excel sheet 中捕获分配给电子邮件的类别(实时)VBA

Capturing the assigned category to email in excel sheet (real time) VBA

我的目标是捕获到 excel sheet 每封电子邮件分配的类别。

我想实时捕获此信息,因为一旦对电子邮件进行分类,就会将其移动到不同的文件夹。

所以我 运行 "ThisOutlookSession" 中的以下代码用于保存收到的电子邮件的主题和正文(我有时也会捕获收到的 date/time,等等... ):

Private WithEvents myOlItems  As Outlook.Items

Private Sub Application_Startup()
    Dim olApp As Outlook.Application
    Dim objNS As Outlook.NameSpace
      Set olApp = Outlook.Application
      Set objNS = olApp.GetNamespace("MAPI")
      Set myOlItems = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub myOlItems_ItemAdd(ByVal item As Object)

On Error GoTo ErrorHandler

  Dim Msg As Outlook.MailItem

  If TypeName(item) = "MailItem" Then
    Set Msg = item


    Dim XLApp As Object ' Excel.Application
    Dim XlWK As Object ' Excel.Workbook
    ' New Excel.Application
    Set XLApp = CreateObject("Excel.Application")
     On Error Resume Next
   Set wb = XLApp.Workbooks.Open _
 ("C:\Users\Name\Downloads\Test.xlsx")
 XLApp.Visible = True
 wb.Worksheets("Sheet1").Range("B2").Value = Msg.Subject
 wb.Worksheets("Sheet1").Range("C2").Value = Msg.Body
    On Error GoTo 0

    MsgBox Msg.Subject
    MsgBox Msg.Body

  End If

ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub

我的目标是在对电子邮件进行分类后进行捕获(即,一旦为电子邮件分配了类别)。我认为 ItemChange 事件将是可行的方法,但到目前为止还没有成功。

任何有关如何在分配类别后更改我的代码以捕获电子邮件正文和主题的建议都将不胜感激。

谢谢。

是的,您走对了路 - ItemChange 是一条路。例如:

Public WithEvents myOlItems As Outlook.Items  

Public Sub Initialize_handler()  
    Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar).Items  
End Sub 

Private Sub myOlItems_ItemChange(ByVal Item As Object)  
    Dim prompt As String    
    prompt = Item.Categories 
    If MsgBox(prompt, vbYesNo + vbQuestion) = vbYes Then 
       Item.Display  
    End If         
End Sub

您也可以考虑处理 Outlook 项目的 PropertyChange 事件。