我正在尝试编写一个简短的VBA脚本,将来自Outlook收件箱的传入邮件移动到子文件夹。这就是我目前所拥有的(由各种帖子组装而成),但是当我发送测试电子邮件时,我没有得到任何结果。如果还有其他与此相关的帖子,我将不胜感激!
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' Default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
Set myInbox = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
If TypeName(item) = "MailItem" Then
Set Msg = item
If Msg.SenderEmailAddress = "name@example.com" Then
If InStr(0, Msg.Subject, "Subject Title", vbTextCompare) > 0 Then
Msg.Move myInbox.Folders("Test").Subfolder("Destination")
End If
End If
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
答案 0 :(得分:0)
看起来您没有正确定义和初始化Items对象。例如:
Public WithEvents myOlItems As Outlook.Items
Public Sub Initialize_handler()
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
' do something here
End Sub
请注意,当同时添加超过16个项目时,不会触发ItemAdd事件。这是OOM中的一个已知问题。
尝试使用Application类的NewMailEx事件。我建议阅读以下系列文章:
最后,您的Outlook是否已在Outlook中启用?您是否查看了信托中心设置?
答案 1 :(得分:0)
将您的代码放入ThisOutlookSession。
在您的代码上方
Public WithEvents Items As Items
使用内置类模块ThisOutlookSession时,Sub Application_Startup()初始化处理程序。