Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用outlook VBA选择outlook邮件文件夹_Vba_Outlook_Directory - Fatal编程技术网

使用outlook VBA选择outlook邮件文件夹

使用outlook VBA选择outlook邮件文件夹,vba,outlook,directory,Vba,Outlook,Directory,我创建了一个VBA子例程,用于在用户表单的列表框中列出名称中包含“NNN”文本的任何和所有子文件夹-我有大量子文件夹,因此查找正确的子文件夹非常耗时。这个程序运行得很好 但是,我现在想做的是双击一个列表框项目,它会“选择”文件夹层次结构中的文件夹,以节省我手动查找它的时间(可能是几级) 我有一个片段可以做到这一点: Public Sub GetItemsFolderPath() Dim obj As Object Dim F As Outlook.MAPIFolder Dim Msg

我创建了一个VBA子例程,用于在用户表单的列表框中列出名称中包含“NNN”文本的任何和所有子文件夹-我有大量子文件夹,因此查找正确的子文件夹非常耗时。这个程序运行得很好

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

我有一个片段可以做到这一点:

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\收件箱\03\u集团财务\00\u组织结构图”


谢谢

我尝试了这个简单的小方法从路径返回文件夹:

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)

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

谢谢你的麻烦。但是,我真正需要的是能够为代码提供一个“纯文本”文件夹路径,然后在Outlook的浏览器屏幕中为我选择该文件夹。我引用的代码片段所做的是,当一个文件夹已经被选中时,它将给出完整的路径,并询问您是否要切换到它。不是很有用,但我抓住了它,因为我认为我可以根据我的目的调整“Set Application.ActiveExplorer.CurrentFolder=F”,但是F不能是普通文本,因为它可以替换为“Inbox”之类的内容失败。@Kovenna-我已经添加了一个关于如何做我认为你想做的事情的示例Hanks Sam-我会在有时间的时候检查一下:)嗯。我更新了我的核心代码(在我最初的帖子中)为:Public Sub-GetItemsFolderPath()Dim obj As Object Dim F As Outlook.MAPIFolder Dim Msg$Dim FPath As String Set obj=Application.ActiveWindow如果obj的类型是Outlook.Inspector,则设置obj=obj.CurrentItem否则设置obj=obj.Selection(1)如果设置F=obj.Parent Msg=“路径是:”&F.FolderPath&vbCrLf Msg=Msg&“切换到文件夹?”如果MsgBox(Msg,vbYesNo)=vbYes,则“Set Application.ActiveExplorer.CurrentFolder=F Set Application.ActiveExplorer.CurrentFolder=FolderFromPath(Path)End If End Sub