0

我试图弄清楚如何通过在该文件夹上放置一个侦听器来跟踪进入该文件夹的邮件项目的数量,但它无法正常工作。这就是我所拥有的,但由于某种原因,当我将多封电子邮件拖到该文件夹​​时,所选数量不正确。基本上,我要对文件夹执行的操作是将拖入其中的邮件项目的所有名称更改为相同的名称。所以我需要能够有一种方法来引用那些被拖入的项目。我想我可以通过使用选择来做到这一点,但我不确定。有任何想法吗??谢谢!这是我的代码:

Private WithEvents MatchTicketNumberItems As Outlook.Items

Private Sub Application_Startup()
  Dim olApp As Outlook.Application
  Dim objNS As Outlook.NameSpace
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")

  'Specify folders that will have listeners on them
  Set MatchTicketNumberItems = objNS.GetDefaultFolder(olFolderInbox).Parent.Folders("MatchTicketNumber").Items
End Sub

Private Sub MatchTicketNumberItems_ItemAdd(ByVal item As Object)
   Dim selected As Integer
   Dim objSelection As Outlook.Selection
   Set objSelection = Application.ActiveExplorer.Selection
   selected = objSelection.count

   'Do stuff
End Sub
4

2 回答 2

0

请记住,MAPI 事件仅用于 UI 目的,并且可以(并且正在)在重负载下跳过。

说了这么多,能具体点吗?您拖动了多少项目以及事件处理程序触发了多少次?

另外,您为什么要使用 Explorer.Selection?如果直接创建项目,则当前选择将无关紧要。

于 2013-08-29T20:58:32.533 回答
0

较早的答案解决了这个问题,但您可以尝试这种自动移动到 MatchTicketNumber 文件夹的方式。

Private Sub MatchTicketNumberItems_ItemAdd(ByVal item As Object)
   Dim objNS As Outlook.Namespace
   Dim i As Long
   ' Do Stuff
   item.Save    
End Sub


Sub Process_Selection_Multiple_MatchTicketNumber()     
    Dim objNS As Outlook.Namespace
    Dim targetFolder As MAPIFolder
    Dim selectionIndex As Long
    Dim itm As Object

    Set objNS = Application.GetNamespace("MAPI")
    Set targetFolder = objNS.GetDefaultFolder(olFolderInbox).Parent.Folders("MatchTicketNumber")

    For selectionIndex = 1 To ActiveExplorer.Selection.count
        Set itm = ActiveExplorer.Selection(selectionIndex)
       itm.Move targetFolder
    Next
End Sub
于 2013-08-30T17:16:25.577 回答