我想在每次收到新电子邮件时都运行一个代码。
以下代码在“ ThisOutlookSession”中
Public WithEvents oItems as Outlook.Items
Private Sub Application.Startup()
Set oItems = session.GetDefaultFolder(olFolderInbox).items
End sub
Private sub oItems_ItemAdd(ByVal item as object)
Debug.print "New email detected"
End sub
此代码可用于1-5个新电子邮件。之后,除非我关闭Outlook并重新打开,否则它不会执行。
好像oItems
失去了与“会话”的连接。
答案 0 :(得分:0)
您可以将其粘贴到ThisOutlookSession
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim oNewMailItem As Outlook.MailItem
Dim appNameSpace As Outlook.NameSpace
Set appNameSpace = Application.Session
Select Case appNameSpace.GetItemFromID(EntryIDCollection).Class
Case Is = olMail
Set oNewMailItem = appNameSpace.GetItemFromID(EntryIDCollection)
End Select
End Sub
该事件返回对象ID,该对象ID用于获取对象。如果对象是电子邮件,则将其另存为本地变量。
或者,您可能不想“糊涂” ThisOutlookSession
,因此您可以使用自定义类并将邮件公开为公共属性。
在ThisOutlookSession
中,您将拥有:
Public cNewMailEx As clsNewMailEx
Private Sub Application.Startup()
Set cNewMailEx = New clsNewMailEx
End sub
在名为clsNewMailEx
的类模块中,您将拥有:
Option Explicit
Private WithEvents olApp As Outlook.Application
Private pMailItem As Outlook.MailItem
Public Property Get NewMailItem() As Outlook.MailItem
Set NewMailItem = pMailItem
End Property
Private Sub Class_Initialize()
Set olApp = Outlook.Application
End Sub
Private Sub olApp_NewMailEx(ByVal EntryIDCollection As String)
Dim appNameSpace As Outlook.NameSpace
Set appNameSpace = Application.Session
Select Case appNameSpace.GetItemFromID(EntryIDCollection).Class
Case Is = olMail
Set pMailItem = appNameSpace.GetItemFromID(EntryIDCollection)
End Select
End Sub
现在,您可以在应用程序中的任何位置使用cNewMailEx.NewMailItem
答案 1 :(得分:0)
#include "jansson_config.h"
是收件箱的首选。
对于其他文件夹,您可以运行NewMailEx
而无需关闭Outlook。
从Application_Startup
中删除Private
。
1-您可以将Private Sub Application_Startup()
分配给按钮。
2-要使您通常白天运行的现有代码中的手动调用Application_Startup
的调用频率降低。