【问题标题】:Move emails from one Outlook folder to another将电子邮件从一个 Outlook 文件夹移动到另一个
【发布时间】:2020-06-03 13:39:05
【问题描述】:

我正在运行此代码以将内容从 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

【问题讨论】:

  • 收件箱中有两个名为TODOtest 的子文件夹?
  • 是的,我有...

标签: vba outlook


【解决方案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

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

我们使用 Loop Backwards 的原因(礼貌:@ComputerVersteher) 如果你向前循环并删除一个项目(例如第一个),以下项目会从它们的前辈那里接管位置(例如第二个得到第一个)并且Collection.Count减一。前向循环会尝试获取直到开始Collection.Count 的项目,但最后一个索引的项目不再可用。向后移动时,您从最后一个项目开始,如果您删除它,下一个项目 (index-1) 仍然可用,因为它保留了位置。顺便说一句,For Eachloops 也会产生奇怪的结果,删除项目时应该避免。

【讨论】:

  • 如果我想从已删除的项目中复制? Set mydeltedfoler = myNameSpace.GetDefaultFolder(olFolderDeleted Items) Set myItems = myFolder.Folders("Deleted Items").Items
  • 里面有一个不需要的空间。解决了谢谢。
最近更新 更多