Outlook VBA /宏在回复时删除/移动原始电子邮件

时间:2012-08-03 14:52:31

标签: vba outlook outlook-vba

在我的工作中,我们有一个票务系统,可以自动向我们发送标题为New Ticket Created: T20120803.0078的票证,其中会生成号码。然后,我们通过电子邮件回复所有人,说我们正在处理机票。回复看起来像RE: New Ticket Created: T20120803.0072

我的Outlook设置为将所有故障单转发到一个名为Tickets的文件夹中。我试图找出如何能够运行脚本或宏,以便在回复电子邮件时,它将回复和原始文件发送到另一个名为InProgress的文件夹。

我去学校接受编程,但没有太多时间来解决这个问题。任何帮助将不胜感激。我认为这很容易。从主题行中获取数字并与其他票证进行比较。如果票证号码匹配,请移动它们。

1 个答案:

答案 0 :(得分:2)

don't have a lot of time to figure this one out.

通常,在这种情况下,我们不会为人们构建代码,但可以帮助他们在他们挣扎的地方构建调整或完美代码。

那就是说,我对你的问题很感兴趣并想学习自己,所以我为你准备了一些东西。这应该会给你一个良好的开端,如果它还不是你所需要的那样。

更新:

第一部分甚至不需要VBA。您可以设置规则,将主题行中"RE: New Ticket Created"的所有已发送邮件移至In Progress文件夹。因此,您甚至不需要下面代码中的整个第一个IfF Then End If块。 (我把它留作参考,目的)。

<强> CODE

所有假设均基于您提供的设置。

将代码放在Outlook VBE中ThisOutlookSession对象的Application_ItemSend事件中。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

Dim olNameSpace As Outlook.NameSpace
Set olNameSpace = GetNamespace("MAPI")

Dim olDestFolder As Outlook.Folder
Set olDestFolder = olNameSpace.Folders("myMailbox@myCompany.com").Folders("In Progress")


If TypeName(Item) = "MailItem" Then 'if it's a mail item being sent

    Dim olMailCopy As Outlook.MailItem
    Set olMailCopy = Item.Copy 'copy the item so we can move it and still have it send

    If InStr(1, olMailCopy.Subject, "New Ticket Created") > 0 Then '

        olMailCopy.Move olDestFolder ' move copy of mail to folder

        Dim strTicket As String
        strTicket = Mid(olMailCopy.Subject, InStrRev(olMailCopy.Subject, ": ") + 2) 'just grab ticket id

    End If

End If


Dim olLookUpFolder As Outlook.Folder
Set olLookUpFolder = olNameSpace.Folders("myMailbox@myCompany.com").Folders("Tickets")

Dim olMail As Outlook.MailItem

For Each olMail In olLookUpFolder.Items 'loop through Tickets folder to find original mail

    If InStr(1, olMail.Subject, strTicket) > 0 Then 'look for unique ticket Id

        olMail.Move olDestFolder ' move to InProgress folder

        Exit For

    End If

Next

End Sub