将电子邮件从一个Outlook文件夹移动到另一个

时间:2019-07-11 13:31:45

标签: vba outlook outlook-vba

我正在运行此代码,将内容从Outlook文件夹TODO复制到Outlook文件夹Test。这两个文件夹都存在。

我知道了

  

“运行时错误'-2147221233(8004010f)”

Set myItem = myInbox.Folders("TODO")

我尝试过

Dim myItem As Folder

Sub MoveItems() 
    Dim myNameSpace As Outlook.NameSpace 
    Dim myInbox As Outlook.Folder 
    Dim myDestFolder As Outlook.Folder 
    Dim myItems As Outlook.Items 
    Dim myItem As Object 

    Set myNameSpace = Application.GetNamespace("MAPI") 
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) 
    Set myItems = myInbox.Items 
    Set myDestFolder = myInbox.Folders("test") 
    Set myItem = myInbox.Folders("TODO") 
    While TypeName(myItem) <> "Nothing" 
        myItem.Move myDestFolder 
        Set myItem = myItems.FindNext 
    Wend 
End Sub

1 个答案:

答案 0 :(得分:1)

这会将所有文件从TODO移到Test

Sub MoveItems()

 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim myItem As Object

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myItems = myInbox.Items
 Set myDestFolder = myInbox.Folders("test")

 Set myItems = myInbox.Folders("TODO").Items

 'Debug.Print myItems.Count

 For i = myItems.Count To 1 Step -1 'Iterates from the end backwards
    myItems.Item(i).Move myDestFolder

 Next

End Sub

您必须循环文件夹中的所有项目,该代码用于查找特定邮件。

为什么我们使用“向后循环”(礼貌:@ComputerVersteher) 如果您向前循环并删除一个项目(例如第一个),则以下项目将从其前任(例如第二个变为第一)取代,Collection.Count则减少一个。正向循环会尝试获取直到开始Collection.Count为止的项目,但是具有最后一个索引的项目不再可用。向后移动时,您将从最后一项开始,如果将其删除,则由于保留位置,下一项(索引1)仍然可用。顺便说一句,For Each循环也会产生奇怪的结果,删除项目时应避免使用。