3

以下を使用して、メールを Outlook のフォルダーに移動しています。

Dim chemin() as String

chemin = Split(path, "/")
Set myNameSpace = Application.GetNamespace("MAPI")
Set myFolder = myNameSpace.Folders("LiveLink").Folders("Livelink HQE").Folders("Entreprise").Folders(chemin(1)).Folders(chemin(2)).Folders(chemin(3))

myEntryID = myFolder.EntryID
myEntryID = myFolder.StoreID

objMail.Move myNameSpace.GetFolderFromID(myEntryID, storeID)    

すべてが実際に機能しています。ご覧のとおり、フォルダーは Livelink にあります。実際、Livelink サーバーの応答は非常に遅く、私にはどうすることもできません。

私の懸念は、 .Folders() を何度も使用することですが、.Folders("Livelink/root/folder1/folder2/"). しかし、これは明らかに機能していません。.Folders コマンドは毎回 Livelink サーバーに ping を実行する必要があるため、このコード行を実行するだけで実際には 10 秒かかります (フォルダーが深くなるほど、到達するのに時間がかかります)それ)。

Outlook の特定のフォルダーに直接アクセスしてメールを移動する他の方法はありますか? 各フォルダ (Livelink のフォルダも含む) に何らかの Outlook ID があることは知っていますが、それを利用する方法がわかりません。次のことを試しましたが、まだ機能していません。

Dim folder As MAPIFolder
Dim myNameSpace As Outlook.NameSpace
Set myNameSpace = Application.GetNamespace("MAPI")
Set folder = myNameSpace.GetFolderFromID(target, Application.GetNamespace("MAPI").Folders("LiveLink").storeID)

これにより、GetFolderfromID() を実行するとエラーが発生します。vartargetは実際には、メールをコピーするフォルダーの EntryID です。

4

1 に答える 1

3

公式ドキュメントに基づいて、フォルダーを複数回見つける必要がない限り、あなたがしていることよりも良い方法はありません.

MSDN が提案するオプションは、フォルダー パスからフォルダー オブジェクトを取得することですが、これは基本的に、既に行っていることと同じことを行います。

問題は、フォルダ オブジェクトが「フォルダ ツリーの1 つのレベルにある特定のサブセットで使用可能なすべての Outlook フォルダを表す」ことだけを表すことです(強調を追加)。

考えられる回避策はNameSpace.GetFolderFromIDEntryIDを使用することですが、そのためには 、場合によってはを知る必要がありますStoreID。これは通常、最初にフォルダーを見つける必要があることを意味します。ただし、将来の即時リコールのためにEntryIDandを保存できます。StoreID

EntryIds およびs の使用について詳しく知りたい場合は、 EntryIDs および StoreIDs の操作に関するStoreID開発者向けリファレンスを参照してください。

于 2012-09-27T15:38:18.507 に答える