【问题标题】:Outlook Macro that will copy an email I flag and put it in a folderOutlook 宏将复制我标记的电子邮件并将其放入文件夹中
【发布时间】:2016-03-15 21:32:28
【问题描述】:

如何移动我标记的电子邮件副本并将它们放入文件夹中?

例如,John Doe 给我发了一封电子邮件,我标记它,原始电子邮件保留在我的收件箱中,但电子邮件的副本进入名为 "Follow Up" 的文件夹。有人能帮我吗?

编辑:

下面的代码与我想要的非常接近,但它将原始电子邮件移动到文件夹而不是副本。它也不针对标记的电子邮件。

Sub FollowUp()
On Error Resume Next

Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Outlook.MailItem



Set ns = Application.GetNamespace("MAPI")

'Define path to the target folder
Set moveToFolder = ns.Folders("MainFolder").Folders("Inbox").Folders("Follow Up")

If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox ("No item selected")
Exit Sub
End If

If moveToFolder Is Nothing Then
MsgBox "Target folder not found!", vbOKOnly + vbExclamation, "Move Macro Error"
End If

For Each objItem In Application.ActiveExplorer.Selection
If moveToFolder.DefaultItemType = olMailItem Then
  If objItem.Class = olMail Then
     objItem.Move moveToFolder
  End If
End If
Next

Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing


End Sub

【问题讨论】:

  • 您要求仅在邮件被标记时才移动副本?自动还是通过选择?
  • 通过选择。如果我的收件箱中有一封电子邮件,我单击右侧的标志,我希望它复制已标记的电子邮件并将其放入文件夹中。我希望每次标记电子邮件时它都是自动的。

标签: vba outlook outlook-2010


【解决方案1】:

我认为这是您尝试做的事情,请将以下代码添加到 ThisOutlookSession,然后重新启动您的 Outlook。

代码将自动移动标记的 Mailitem 的副本

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNameSpace As Outlook.NameSpace
    Dim olFolder  As Outlook.MAPIFolder

    Set olNameSpace = Application.GetNamespace("MAPI")
    Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox) 
    Set Items = olFolder.Items
End Sub

Private Sub Items_ItemChange(ByVal Item As Object)
    Dim olNameSpace As Outlook.NameSpace
    Dim olFolder  As Outlook.MAPIFolder
    Dim olInbox  As Outlook.MAPIFolder
    Dim ItemCopy As MailItem

    Set olNameSpace = Application.GetNamespace("MAPI")
    Set olInbox = olNameSpace.GetDefaultFolder(olFolderInbox)
    Set olFolder = olInbox.Folders("Follow Up")

    If TypeOf Item Is Outlook.MailItem Then
        Debug.Print Item

        If Item.FlagStatus = olFlagMarked Then
            Set ItemCopy = Item.Copy ' Copy Flagged item
             ItemCopy.Move olFolder ' Move Copied item
        End If

        Set Item = Nothing
        Set ItemCopy = Nothing
    End If
End Sub

Alt+F11

双击 ThisOutlookSession 并将代码粘贴到那里,然后重新启动 Outlook 并标记您的邮件项目。

【讨论】:

  • 我不确定我是否正确实现了这一点。我创建了一个宏并插入了代码并对其进行了测试,但什么也没发生。我保存了宏,关闭了 Outlook,重新打开它并再次运行宏,但仍然没有。你能告诉我“ThisOutLookSession”在哪里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多