【问题标题】:Outlook VBA - Move to folder - Body textOutlook VBA - 移动到文件夹 - 正文文本
【发布时间】:2020-06-30 19:36:06
【问题描述】:

我尝试创建一个脚本,从收到的电子邮件中搜索正文和发件人姓名,如果为真,则将电子邮件移动到子文件夹。

我尝试将此代码添加到 ThisOutlookSession 但它不起作用。

Public Sub MailtoFolder(Item As Outlook.MailItem)

    Dim myNameSpace As Outlook.NameSpace
    Dim myInbox As Outlook.MAPIFolder
    Dim myDestFolder As Outlook.MAPIFolder

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)

    Set myDestFolder = myInbox.Folders("xTest")

    If InStr(Item.Body, "Test123") > 0 And Item.SenderName = "Jon" Then

        Item.Move myDestFolder

    End If

    Set myDestFolder = Nothing
    Set myInbox = Nothing
    Set myNameSpace = Nothing

End Sub

有什么想法我做错了吗?

【问题讨论】:

  • 您确实意识到您可以在 Outlook 中创建规则,它会扫描收到的邮件,然后在邮件到达您的主收件箱之前将电子邮件移动到特定的子文件夹?
  • 你遇到了什么错误,执行到了什么程度?你有没有设置断点来调试?
  • 我愿意,但您不能添加诸如“电子邮件正文不包含特定单词”之类的规则。此外,一旦上面的代码正常工作,我想添加更多条件。
  • 我没有收到错误。它正在运行,但什么也没发生。当我设置断点 Item.Body = "" 我不知道为什么

标签: vba outlook


【解决方案1】:

到目前为止,您的“项目”尚未设置。 如果您希望将此应用于当前打开的电子邮件,例如:

Set Item=Application.ActiveExplorer.Selection.Item(1)

如果您希望遍历文件夹中的所有邮件,您需要这样做:

Set myDestFolder = myInbox.Folders("xTest")
For Each mailItem in myDestFolder.Items
'  ... do your magic
Next mailItem

【讨论】:

  • Item 设置在 Public Sub MailtoFolder(Item As Outlook.MailItem) 中。同样,当您移动或删除项目时,不要使用 For Each。倒数或重复处理项目 1,直到没有更多项目。 stackoverflow.com/questions/18469184/…
  • 在改变循环的索引时你是正确的(对于 int i=...)。尽管如此,“Item”只是为了作为一个看似传递的参数而设置。取决于你从哪里调用那个子。您不应该更改正在循环的集合 - 但这是一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 2016-11-14
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多