2016-01-15 64 views
0

下面的行不适用于我的子文件夹。它只显示添加,应用程序,类,计数等,但并没有真正提示我使用移动功能。无法将电子邮件移至其他文件夹

objItems.Move objDestFolder 

下面是代码的其余部分:

Sub MoveEmail() 

Dim objNS As NameSpace 
Dim objFolder As MAPIFolder 
Dim objDestFolder As MAPIFolder 
Dim obj As Object 
Dim objOL As Outlook.Application 
Dim objItems As Outlook.items 

    Set objOL = Outlook.Application 
    Set objNS = objOL.Application.Session 

'specify the Inbox Folder you want to extract the email 
Set objFolder = objNS.GetDefaultFolder(olFolderInbox).Folders("For Processing") 
Set objItems = objFolder.items 

Set objDestFolder = objNS.GetDefaultFolder(olFolderInbox).Folders("For Temp") 

For Each obj In objItems 
    If obj.Class = olMail Then 
     objItems.Move objDestFolder 

     Set obj = Nothing 
     Set objItems = Nothing 
     Set objFolder = Nothing 
     Set objOL = Nothing 
     Set objDestFolder = Nothing 

    End If 

Next 

End Sub 

回答

1

您正在对Items对象调用Move,而不是MailItem。如果您正在修改集合,您也不应该使用“for each”。使用下行循环。 更改您的代码到

For i = objItems.Count to 1 step -1 
    set obj = objItems.Item(I) 
    If obj.Class = olMail Then 
     obj.Move objDestFolder 
    End If 
Next 
+0

工程就像一个魅力谢谢!我也在使用一个提取电子邮件到excel的代码。我是否也应该使用下行循环? '对于每个物镜在objItems' '如果obj.Class = olMail Then' 'myXLApp.Worksheets( “工作表Sheet”)。细胞(I,1)=格式(obj.ReceivedTime中,“mm /日/年“)单元格(i,3)= obj.Subject' 'myXLApp.Worksheets(”Sheet1“)。工作表(“Sheet1”)单元格(i,5)= ActiveAgnt' 'i = i + 1' 'End If' – Wilson

+0

如果您只读取数据,则可以使用“for each”或up“for “循环。 –

0

真的不知道为什么您使用的是For Each环,但随后设置你要遍历更不用说集合变量,一旦你迭代的对象是一个邮件项目?

无论如何,我不相信您可以一次移动整个文件夹,因此IntelliSense不会为您提供将该方法与对象一起使用的选项。

您需要遍历文件夹中的每个邮件项目并逐个移动它们。

For Each obj In objItems 
    If obj.Class = olMail Then 
     obj.Move objDestFolder  
    End If 
Next obj 
+0

下一次我这样做,我要切换到100%下循环。 – niton

相关问题