【问题标题】:VBA to move read emails to specific foldersVBA 将已读电子邮件移动到特定文件夹
【发布时间】:2017-09-23 20:13:14
【问题描述】:

我正在努力寻找一个相当普遍的问题的明确答案?

我的老板在收件箱中有团队成员的文件夹,但不想将电子邮件移到那里,直到它们从收件箱中读出。所以我正在尝试编写一个遵循这些逻辑步骤的宏:

For each mailitem in inbox:
    Check if read
      Check sender name
      select case True
        sender name like existing folder name
        move item to corresponding folder name
next mailitem

你能帮我把这个放在一起吗,我在这上面迷路了!!

菲尔

【问题讨论】:

  • 欢迎来到 *。请注意,这不是免费的代码编写服务。然而,我们渴望帮助其他程序员(和有志者)编写自己的代码。请阅读How do I Ask a Good Question 上的帮助主题。之后,请使用您迄今为止编写的 VBA 代码更新您的问题,以完成您希望完成的任务。我们会在这里等你。随时准备协助并帮助您完成您的代码
  • 我格式化了你的代码,但我不能 100% 确定我得到了正确的缩进来反映你的意思。如有必要,请查看和编辑。
  • 加入伪代码并不会改变这是一个代码编写服务类型的问题。有人已经回答了您的问题,尽管我认为他们真的不应该回答,因为它不会教给您任何东西。如果你的老板要你做这个练习,他们可能希望你理解和学习 VBA,而不是让别人写。我希望你把你的一些薪水寄给尤金,因为他刚刚为你完成了你的工作,尽管你没有学到可以帮助你进一步发展事业的知识......(续)
  • 如果您在 Google 上搜索过“如何在收件箱 vba 堆栈溢出中获取邮件”,您会发现 *.com/questions/24321752/… 以及许多其他让您开始的好问题,您可以一直在谷歌上搜索,直到你弄明白或者遇到了你无法弄明白的问题。当然,这里欢迎您,但请先尝试一下。

标签: vba sorting email outlook directory


【解决方案1】:

遍历收件箱文件夹中的所有项目不是一个好主意。您需要使用Items 类的Find/FindNextRestrict 方法来查找与您的条件相对应的所有项目(阅读和发件人姓名)。在以下文章中详细了解这些方法:

然后您可以使用 MailItem 类的 Move 方法将 Microsoft Outlook 项目移动到新文件夹。例如:

Sub MoveItems() 
 Dim myNameSpace As Outlook.NameSpace 
 Dim myInbox As Outlook.Folder 
 Dim myDestFolder As Outlook.Folder 
 Dim myItems As Outlook.Items 
 Dim myItem As Object 

 Set myNameSpace = Application.GetNamespace("MAPI") 
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) 
 Set myItems = myInbox.Items 
 Set myDestFolder = myInbox.Folders("Personal Mail") 
 Set myItem = myItems.Find("[SenderName] = 'Eugene Astafiev'") 
 While TypeName(myItem) <> "Nothing" 
  myItem.Move myDestFolder 
  Set myItem = myItems.FindNext 
 Wend 
End Sub

Getting Started with VBA in Outlook 2010 文章可能对您有所帮助。

【讨论】:

  • 谢谢,这看起来很棒。我以前做过一些 VBA,当我重新开始工作时,我有信心把它向前推进!我不确定如何将其标记为答案,但显然尤金确实胜出了。很抱歉我弄错了,我不想放一些完全的垃圾,但这当然不能成为不遵守协议的借口。