检查文件夹和错误时出错第一个pst中的子文件夹,如果第二个pst中不存在则创建

时间:2017-08-29 10:22:23

标签: vba vsto outlook-addin outlook-vba

我正在尝试使用AddStore在Outlook中添加新的pst,然后检查新添加的pst是否具有与默认pst相同的文件夹和子文件夹,否则它将创建文件夹然后执行其他命令

这里我包含了部分代码,其中应该完成循环和创建,但我在行"Cannot Create Folder"

中收到错误newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)

如何检查新pst中是否存在文件夹并进行相应创建,这也适用于子文件夹。

# 的($除外).StackTrace

   at Microsoft.Office.Interop.Outlook._Folders.Add(String Name, Object Type)
   at AutoBackup.ThisAddIn.SetSrcAndDst(String Src, String Dst) 
      in E:\projects\ThisAddIn.vb:line 76

代码部分

sFolders = oNspace.Folders.Item(src_pst).Folders
destFolderRoot = oNameSpace.Folders.Item(dst_pst)
destFolders = oNameSpace.Folders.Item(dst_pst).Folders

For Each sourceFolder In sourceFolders
   For Each destFolder In destFolders
     If sourceFolder.Name = destFolder.Name Then
        'do something
     Else
        newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)
     End If
  Next
Next

enter image description here

更新

我尝试了另一种使用For Loop检查它是否正常工作的方法(下面给出的代码),这次第二次pst中的非退出文件夹创建成功,但还有另一个问题: 通过第一次循环,它在第二个pst中创建了不存在的文件夹,但是在创建新文件夹之后,其余的循环没有检测到这种情况sFolders.Item(i).Name = dFolders.Item(i).Name,而是将Deleted Items, Inbox, Sent之类的默认文件夹返回到{ {1}}条件然后转向返回错误Else,因为该文件夹已存在于第二个pst中,这就是我如何知道为什么我第一次使用"Cannot Create Folder"循环收到错误因为条件不能正常工作并将现有文件夹返回到For Each条件以创建为新文件夹。可能是专家可能有解决方案,但我似乎没有从谷歌搜索任何提示,我也不是很专家。

Else

1 个答案:

答案 0 :(得分:0)

看来你的逻辑正在尝试创建源文件夹,在它存在后多次创建。

我不知道你使用的语言是什么,所以这里有一种快速而又脏的VBA方法来绕过错误。

For Each sourceFolder In sourceFolders

    For Each destFolder In destFolders

        If sourceFolder.Name = destFolder.Name Then
            'do something

        Else
            ' attempt to create all other folders than destfolder
            '  without checking if sourceFolder exists

            ' for a specific purpose
            ' - when folder already exists bypass the error line 
            on error resume next
            newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)
             ' turn bypass off
             '  return to normal error handling
             on error goto 0
        End If

    Next

Next

为了提高效率,您可能希望移动添加逻辑,使其在循环遍历所有现有文件夹后运行,并确定第二个pst中不存在sourceFolder。