【问题标题】:Add categories to incoming emails using VBA [closed]使用 VBA 将类别添加到传入电子邮件 [关闭]
【发布时间】:2012-03-07 16:21:39
【问题描述】:

我正在尝试在 Outlook 2003 中编写 VBA 代码,该代码将在发送时将类别添加到电子邮件中,以便回复显示时会自动添加类别。这是为了使提交回复更容易。

例如,如果我发送一封回复所有人的电子邮件,我的收件箱中的回复理想情况下会自动显示为“~Reply”类别。目前我正在手动分类的所有回复。

任何人都可以协助处理此代码吗?我已经看到如何从这个论坛中删除类别,但我正在尝试添加一个。

【问题讨论】:

  • 如果我理解正确,您希望在发送消息时对其进行分类,并希望在回复返回时仍以这种方式分类。对我来说,这太不可靠了,因为(1)如果其他人不使用 Outlook,它就无法工作,(2)其他人可能会重新分类它。对我来说,您最好尝试将发送的消息与收到的回复进行匹配。
  • 您好托尼,感谢您的回复。基本上,我在与多个用户共享的收件箱中工作,我们回复全部,因此我们发送的消息会发送给收件人并返回到我们的共享收件箱。我想弄清楚的是,我怎样才能让发送的消息进入我们的收件箱,并带有一个指示发送它的用户的标签。示例“~Reply, Joe”或“~Reply, Frank”等。希望这能澄清一点。

标签: vba outlook outlook-2003


【解决方案1】:

我无法使用共享收件箱对此进行测试,但希望以下内容有所帮助。

VBA 编辑器的资源管理器将列出如下结构:

-  Project 1 (VbaProject.OTM)
  + Microsoft Office Outlook Objects
  + Forms
  + Modules

点击Microsoft Office Outlook Objects的+号获取

-  Project 1 (VbaProject.OTM)
  - Microsoft Office Outlook Objects
    + ThisOutlookSession
  + Forms
  + Modules

以下所有代码必须放在ThisOutlookSession模块中。

第一个例程 (Application_Startup) 在您打开 Outlook 时被调用。

Option Explicit
Public UserName As String
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_Startup()

  ' This event procedure is called when Outlook is started

  Dim NS As NameSpace

  Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")

  With NS
    UserName = .CurrentUser
    Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
  End With

  MsgBox "Welcome " & UserName

End Sub

以上代码中有两个独立的活动。

首先它设置UserName = .CurrentUser。当我运行上面的代码时,UserName 被设置为我的用户名。我假设您和您的同事也是如此,因此下面的宏可以知道哪个用户是当前用户。请注意,用户必须授予宏访问.CurrentUser 的权限。您可能更喜欢使用 InputBox 来获取用户的姓名首字母。

其次,它初始化MyNewItems。这允许我为添加到收件箱的新项目指定一个事件处理程序。

下一个例程 (Application_ItemSend) 在单击发送按钮之后和发送消息之前调用。您可以更改或添加到消息中。您甚至可以使用Cancel = False 取消发送。

我已使用此例程将可能有用的属性输出到即时窗口。

根据我的实验,您设置的任何类别都会记录在“已发送邮件”版本中,但不会记录在发送给收件人的版本中。因此,即使对方使用 Outlook,他们也无法在回复中。

一种选择是在主题末尾添加一个代码。另一种选择是将.ReplyRecipients 设置为不同的地址。消息仍会从群组收件箱发送,但任何回复都会发送至.ReplyRecipients

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

  ' This event procedure is called when the Send button is clicked but
  ' before the item is sent.

  Dim Inx As Long

  Debug.Print "------Item Send"

  ' Note this routine operate on all items not just mail items.
  ' See "myNewItems_ItemAdd" for a method of restricting the 
  ' routine to mail items

  With Item

    .Subject = .Subject & " (xyz1)"
    Debug.Print "Subject " & .Subject

    For Inx = 1 To .Recipients.Count
      Debug.Print "Recipient " & .Recipients(Inx).Name
    Next

    ' Remove any existing reply recipients
    Do While .ReplyRecipients.Count > 0
      .ReplyRecipients.Remove 1
    Loop

    .ReplyRecipients.Add "JohnSmith@Company.com"

  End With

End Sub

最后一个例程 (myNewItems_ItemAdd) 处理新邮件项目。当前代码不执行其他项目,例如会议请求。这段代码除了将主题输出到即时窗口之外什么都不做。但是,您可能希望将邮件移动到另一个文件夹。

Private Sub myNewItems_ItemAdd(ByVal Item As Object)

  ' This event procedure is called whenever a new item is added to
  ' to the InBox.

  Dim NewMailItem As MailItem

  Debug.Print "------Item Received"

  On Error Resume Next
  ' This will give an error and fail to set NewMailIten if
  ' Item is not a MailItem.
  Set NewMailItem = Item
  On Error GoTo 0

  If Not NewMailItem Is Nothing Then
    ' This item is a mail item
    With NewMailItem
      Debug.Print .Subject
    End With
  Else
    ' Probably a meeting request.
    Debug.Print "Not mail item " & Item.Subject
  End If

End Sub

希望以上内容能给你一些想法。

【讨论】:

  • 谢谢托尼,非常感谢您在这方面的帮助。我对上述内容有点困惑,因为它在主题中发送“xyz1”?我真正想要得到的是与电子邮件一起发送的类别。对于当前的用户代码,我也很乐意在每台本地机器上编辑宏。在上面的 ItemSend 部分,我在子应用程序的中间看到了 .Subject 编码,有没有办法在这里添加到类别而不是主题?再次感谢您的帮助伙伴
  • 正如我上面所说,我无法找到一种方法来获取与消息一起发送的类别,因此它无法返回回复。根据我的经验,尽管邮件系统通常会在开头添加“Re:”,但人们很少编辑主题。因此,如果您的宏在主题末尾添加了一些代码字母,它们几乎肯定会出现在回复中。您还可以控制将在回复中的回复收件人。我想不出您可以发送的其他任何您可以期望在回复中的内容。另一种方法是保留您期望的回复列表,并将其与您收到的消息相匹配。
  • 好的,托尼,再次感谢您的帮助。我会看看我能做些什么来改变我们发送电子邮件的方式。非常感谢您的帮助
  • 祝你好运,但我仍然认为你最好的选择是将收到的电子邮件与已发送的项目进行匹配。如果您向 John Smith 发送主题为“xyz”的电子邮件,您希望在一两天内收到来自 John 的主题为“Re: xyz”的电子邮件。如果您搜索正文,您会希望找到您(或同事)发送它的日期/时间以及您的姓名。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 2020-10-03
  • 1970-01-01
  • 2018-07-24
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
相关资源
最近更新 更多