在 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 事件。
我的目标是捕获到 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 事件。