2017-08-29 34 views
0

我试图用AddStore添加在Outlook中新的PST,然后检查是否新增加的PST具有相同的文件夹和子文件夹默认的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, SentElse条件,然后转而返回错误"Cannot Create Folder",因为该文件夹已存在于第二PST,这是我怎么知道我为什么用For Each循环得到的错误在第一时间因条件而不能正常工作和现有文件夹返回Else条件来创建新的文件夹。可能会出现专家的解决方案,但我似乎没有从Google上获得任何提示,但我也不是很专业。

For i = 1 To sFolders.Count 
     If sFolders.Item(i).Name = dFolders.Item(i).Name Then 
      Call CopyMail(sFolders.Item(i), dFolders.Item(i)) 
     ElseIf sFolders.Item(i).Name IsNot dFolders.Item(i).Name Then     
      dFolderN = dFolderR.Folders.Add(sFolders.Item(i).Name) 
     End If 
    Next 
+0

[Create Directory + Sub Directories](https://stackoverflow.com/questions/1680836/create-directory-sub-directories) –

+0

对不起。它不是很可能的解决方案。我的文章是关于用VB编写的outlook add-Inn。感谢检查,虽然 – Hayan

+0

C#解决方案将(几乎)总是在VB中工作。下面是对[微软的文档]链接(https://msdn.microsoft.com/en-us/library/54a0at6s(V = vs.110)的.aspx)。它包含C#和VB示例。 –

回答

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 

为了提高效率,你可能会想,因此在所有现有文件夹循环后运行移动添加逻辑和你已经确定sourceFolder不会在第二PST存在。

相关问题