2017-08-29 32 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存在。

相關問題