2017-08-29 3 views
0

AddStoreを使用してOutlookに新しいpstを追加しようとしていて、新しく追加されたpstにデフォルトのpstそうでない場合は、フォルダを作成してから他のコマンドを実行します。最初のpstのフォルダとサブフォルダを確認する際にエラーが発生し、2番目のpstに存在しない場合は作成する

ここで私はループと作成が行われるべきコードの一部が含まれていますが、私はnewDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)

どのようにフォルダが新しいPSTに存在していないかどうかを確認して作成するのですラインでエラー"Cannot Create Folder"を取得していますしたがって、これはサブフォルダにも適用する必要があります。

($例外).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を使って別の方法を試しています(以下のコード)。この時間は2番目のpstの非終了フォルダが正常に作成されましたが、別の問題があります。 初めてループすると、 2番目のpstの既存のフォルダですが、新しいフォルダが作成された後、ループの残りの部分はsFolders.Item(i).Name = dFolders.Item(i).Nameの代わりにDeleted Items, Inbox, SentElseにデフォルトのフォルダを返します。そのフォルダは既に存在するため、"Cannot Create Folder"という戻りエラーになります。 2番目のpst、これは私がFor Eachループで初めてエラーが発生した理由を知る方法です。条件が正しく動作せず、新しいフォルダとして作成するために既存のフォルダをElseに戻すためです。エキスパートからの解決策があるかもしれませんが、私はグーグルで何のヒントも得られないようですが、私はあまり専門家ではありません。

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

[ディレクトリとサブディレクトリの作成](https://stackoverflow.com/questions/1680836/create-directory-sub-directories) –

+0

の重複している可能性があります。その可能性の高い解決策はありません。私のポストは、VBで書かれたOutlookのアドインについてです。 – Hayan

+0

C#ソリューションは(ほぼ)常にVBで動作しますが、確認していただきありがとうございます。 [Microsoftのドキュメント](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ファイルに存在しない決定しているので、追加のロジックを移動することになるでしょう。

関連する問題