【问题标题】:select outlook mail folder using Outlook VBA使用 Outlook VBA 选择 Outlook 邮件文件夹
【发布时间】:2018-11-08 02:12:04
【问题描述】:

我创建了一个 VBA 子例程,用于在用户窗体的列表框中列出名称中包含“NNN”文本的所有子文件夹 - 我有很多子文件夹,因此是时候找到正确的子文件夹了消耗。此例程完美运行。

但是,我现在想要做的是双击一个列表框项目,它会“选择”文件夹层次结构中的文件夹,以节省我手动定位它的时间(它可能向下几个级别) .

我有一个可以这样做的 sn-p:

Public Sub GetItemsFolderPath()
  Dim obj As Object
  Dim F As Outlook.MAPIFolder
  Dim Msg$
  Set obj = Application.ActiveWindow
  If TypeOf obj Is Outlook.Inspector Then
    Set obj = obj.CurrentItem
  Else
   Set obj = obj.Selection(1)
  End If
  Set F = obj.Parent
  Msg = "The path is: " & F.FolderPath & vbCrLf
  Msg = Msg & "Switch to the folder?"
  If MsgBox(Msg, vbYesNo) = vbYes Then
   Set Application.ActiveExplorer.CurrentFolder = F
  End If
End Sub

但是,如果我尝试将“F”替换为只是一个字符串的文件夹路径,则会失败。 所以我的问题是,如何仅使用文件夹路径的字符串来选择文件夹,例如“paul@anymail.com\Inbox\03_Group Finance\00_Organization Chart”

谢谢

【问题讨论】:

    标签: vba outlook directory


    【解决方案1】:

    我尝试了这个简单的小东西来从路径返回一个文件夹:

    Function FolderFromPath(FolderPath As String) As Folder
        Dim F As Folder
        Dim arrFolders() As String
        Dim i As Integer
        Set myNamespace = Application.GetNamespace("MAPI")
    
        Set F = myNamespace.GetDefaultFolder(olFolderInbox)
        arrFolders = Split(FolderPath, "\")
        For i = 4 To UBound(arrFolders)
            Set F = F.Folders(arrFolders(i))
        Next
        Set FolderFromPath = F
     End Function
    

    它从您的收件箱开始(这可能不是您需要的),然后拆分路径并进入路径中的每个文件夹。

    评论后更新 我忘了展示如何使用它。你可以这样做:

    Path = "\\first.last@company.com\Inbox\Folder1\Folder2"
    Set Application.ActiveExplorer.CurrentFolder = FolderFromPath(Path)
    

    【讨论】:

    • 感谢山姆的麻烦。但是,我真正需要的是能够为代码提供“纯文本”文件夹路径,然后选择该文件夹供我在 Outlook 的资源管理器屏幕中查看。我引用的 sn-p 所做的是,当已经选择了一个文件夹时,它会给出完整路径并询问您是否要切换到它。不是很有用,但我抓住了它,因为我认为我可以根据我的目的调整“Set Application.ActiveExplorer.CurrentFolder = F”,但是 F 不能是普通文本,因为用“收件箱”之类的东西替换它会失败。
    • @Kovenna - 我添加了一个示例,说明如何做我认为你想做的事
    • 谢谢 Sam - 有时间我会检查的 :)
    • 嗯。我将我的核心代码(在我最初的帖子中)更新为:
    • Public Sub GetItemsFolderPath() Dim obj As Object Dim F As Outlook.MAPIFolder Dim Msg$ Dim FPath As String Set obj = Application.ActiveWindow If TypeOf obj Is Outlook.Inspector Then Set obj = obj.CurrentItem Else Set obj = obj.Selection(1) End If Set F = obj.Parent Msg = "路径是:" & F.FolderPath & vbCrLf Msg = Msg & "切换到文件夹?" If MsgBox(Msg, vbYesNo) = vbYes Then 'Set Application.ActiveExplorer.CurrentFolder = F Set Application.ActiveExplorer.CurrentFolder = FolderFromPath(Path) End If End Sub
    【解决方案2】:

    Sam 描述的方法可以满足您的需求。代码有一个小问题。索引开始沿着路径很远。如果初始引用是收件箱,则 4 应该是 2。

    Function FolderFromPath(FolderPath As String) As Folder
    
        Dim F As Folder
        Dim arrFolders() As String
        Dim i As Long
    
        arrFolders = Split(FolderPath, "\")
    
        ' Initial reference is to the mailbox - array element 0
        Set F = Session.Folders(arrFolders(0))
    
        ' The next folder is array element 1
        For i = LBound(arrFolders) + 1 To UBound(arrFolders)
            Set F = F.Folders(arrFolders(i))
        Next
    
        Set FolderFromPath = F
    
     End Function
    
    
    Public Sub GetItemsFolderPath_Test()
    
        Dim FPath As String
    
        FPath = "paul@anymail.com\Inbox\03_Group Finance\00_Organization Chart"
    
        Set ActiveExplorer.CurrentFolder = FolderFromPath(FPath)
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 2018-10-05
      • 2015-01-18
      • 2021-12-16
      • 2015-03-10
      相关资源
      最近更新 更多