【问题标题】:Listen to multiple items being dragged into a folder - Outlook收听多个项目被拖入文件夹 - Outlook
【发布时间】:2013-09-02 09:33:54
【问题描述】:

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

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

【问题讨论】:

    标签: vba outlook event-handling listener outlook-2010


    【解决方案1】:

    较早的答案解决了这个问题,但您可以尝试这种自动移动到 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
    

    【讨论】:

      【解决方案2】:

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

      话虽如此,你能说得更具体一点吗?您拖动了多少项目以及事件处理程序触发了多少次?

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

      【讨论】:

      • 例如:我的收件箱中有 3 封邮件。其中一个有一个我希望其他两个有的主题。所以我想将它们一起移动到“MatchTicketNumber”文件夹,该文件夹将在其中循环遍历它们(For Each obj In objSelection etc...),找到具有我正在寻找的特定主题的项目,然后复制受制于他人。然后,一旦完成,我希望将所有项目移回我的主收件箱。很奇怪,我知道。但是我需要一些方法来引用所有这些文件,我认为我可以通过循环选择来做到这一点。不相关是什么意思?
      • 那么具体的问题是什么?您是说您选择了 3 个项目,但选择计数返回不同的数字?请记住,当 ItemAdd 事件触发时,该项目已经在新文件夹中,因此除非您使用复制(Ctrl+拖动),否则它会从选择中消失。
      • 看起来我需要做的就是像你说的那样按住 Ctrl 键,这样项目就会留在选择中。非常感谢楼主!
      • 好吧,如果你能强迫最终用户总是这样做,你就很幸运了 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2018-05-08
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      相关资源
      最近更新 更多