[在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
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