在Outlook上创建一个宏的“元规则”:在带有快速查看器名称的各个文件夹中对邮件进行排序

问题描述 投票:0回答:2
早上好,

[在Outlook软件中和网站上,可以创建规则,例如规则,对于一个Expeditor,它会将所有邮件移动到您选择的文件夹中(例如,它将创建一个以Expeditor名称命名的文件夹) 。但是,如果我希望所有加速器都执行此操作,则需要为每个加速器重复创建规则,这意味着很多次!我希望是一种宏的“元规则”,以便每个专家在其姓名下都具有一个文件夹,并对相应的邮件进行排序。我试图从主题[[Outlook template rule to sort mails among directories开始。

所以我设法写了这个:

Sub RulesForFolders(m As MailItem) Dim fldr As Outlook.Folder For Each fldr In GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders if fldr.Name Like m.SenderName Then m.MoveTo(SenderName) else folders.add(m.SenderName) Next Set fldr = Nothing End Sub

目前,我的代码概念很差(我对类,对象,传统,变量,函数,循环的概念非常了解),因此我对倍数错误事先表示歉意。我实际上是在VisualBasic上学习和发现VBA和对象浏览器(我不知道它是否适合这种情况,但它是我在Outlook软件中找到的唯一接口。)

[如果有效,我将尝试进一步改进它,因为如果宏找到了具有Expeditor名称的子文件夹,它会将邮件移入其中,而不是创建具有该名称的文件夹(我已经找到了一个主题,提到如何考虑子文件夹)。但是实际目标足以组织足够的工作量。

谢谢您,它将彻底保存我的邮箱!我准备合作,并尽我最大的努力!

Keyo

sorting directory macros outlook-vba mail-sender
2个回答
0
投票
要查找带有发件人名称的文件夹,您可以递归遍历所有子文件夹:

Private Sub processFolder(ByVal oParent As Outlook.MAPIFolder) Dim oFolder As Outlook.MAPIFolder Dim oMail As Outlook.MailItem For Each oMail In oParent.Items 'Get your data here ... Next If (oParent.Folders.Count > 0) Then For Each oFolder In oParent.Folders processFolder oFolder Next End If End Sub

最后,我建议从Getting started with VBA in Office文章开始更深入地研究VBA。

如果不需要遍历所有文件夹,也可以使用以下代码:


Sub RulesForFolders(m As MailItem) Dim fldr As Outlook.Folder Dim new_fldr As Outlook.Folder Dim ns as Outlook.Namespace Dim inbox as Outlook.Folder Set ns = Application.GetNamespace("MAPI") Set inbox = ns.GetDefaultFolder(olFolderInbox) For Each fldr In inbox.Folders if InStr(fldr.Name,m.SenderName) > 0 Then m.MoveTo(fldr) Return End If Next Set new_fldr = folders.add(m.SenderName) m.MoveTo(new_fldr) Set fldr = Nothing Set new_fldr = Nothing Set inbox = Nothing Set ns = Nothing End Sub

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.