vba - 将 Outlook 传入邮件移动到以相同代码开头的文件夹
问题描述
我正在尝试自动将传入消息移动到 Outlook 中的指定子文件夹。
包含 P000.0000 格式的项目编号的邮件应移动到以相同项目编号开头的收件箱的子文件夹中。
子文件夹将手动预先创建,因此用户可以决定在专用子文件夹中汇总哪些项目。
文件夹结构为收件箱>Actueel>P000.0000
第一点,检查传入消息的地方工作正常,但在那之后我迷路了......它从哪里开始For Each Folder In olFolderPrjcts
错误在这一行Set olFolder = objNS.GetDefaultFolder(olFolderInbox)
到目前为止,这是我想出的:
Private WithEvents myOlItems As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set olFolder = objNS.GetDefaultFolder(olFolderInbox)
Set myOlItems = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal item As Object)
Dim Atts As Outlook.Attachments
Dim Props As Outlook.UserProperties
Dim Prop As Outlook.UserProperty
Dim PropName As String
PropName = "NumberAttachments"
Set Atts = item.Attachments
Set Props = item.UserProperties
Set Prop = Props.Find(PropName, True)
If Prop Is Nothing Then
Set Prop = Props.Add(PropName, olText, True)
End If
Dim olFolder As Outlook.MAPIFolder
Set olFolder = objNS.GetDefaultFolder(olFolderInbox)
Dim olFolderPrjcts
Set olFolderPrjcts = olFolder.Folders("actueel")
Prop.Value = Atts.Count
item.Save
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
For Each Folder In olFolderPrjcts
If Left(Msg.Subject, 9) = Left(Folder.Name, 9) Then
Msg.Move (Folder)
End If
Next
' DO SOMETHING TO NEWLY ARRIVED MESSAGE
' If Msg.Subject contains like P000.0000 AND
' folder exists that starts with P000.0000
' then move to that folder
End If
End Sub
解决方案
如果没有 Option Explicit,错误可能是运行时错误“424”:需要对象。
使用 Option Explicit 时,错误可能是编译错误:未定义变量。
Option Explicit
' Tools | Options | Editor tab
' Checkbox "Require Variable Declaration"
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
Dim objNS As Namespace ' <--
Dim olFolder As folder
Dim folder As folder
Dim olFolderPrjcts As folder
Dim Msg As MailItem
Set objNS = GetNamespace("MAPI") ' <--
Set olFolder = objNS.GetDefaultFolder(olFolderInbox)
Set olFolderPrjcts = olFolder.Folders("actueel")
If TypeName(Item) = "MailItem" Then
Set Msg = Item
For Each folder In olFolderPrjcts.Folders
If Left(Msg.subject, 9) = Left(folder.name, 9) Then
'Debug.Print Msg.subject
'Debug.Print folder.name
Msg.move folder ' <-- no brackets
Exit For
End If
Next
End If
End Sub
推荐阅读
- node.js - 错误:评估失败:ReferenceError:_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default 未定义
- r - 如何根据状态级数据框中的值在单个级数据框中创建新变量?
- python - 如何使用 Python 循环访问 MS Access 表
- ruby-on-rails - 在 Rails 中找出未使用的控制器和方法的自动化方法
- javascript - 表示所描述图表的最佳方法是什么
- office365 - 如何将背景图像放置在具有动态高度的表格行的 HTML 电子邮件上?
- java - 如何防止空值作为列表的一部分存储
- c# - 为什么在 Go 和 C# 中转换为 big int 后,字节数组给出不同的数字?
- c# - 使用 iText7 和 ASP NET C# 从包含 html 代码的 MySql 表创建 pdf 文件
- python - 在一个范围内将16位数字的前15位加1