我是VBA的新手,正在寻找一种方法来从名为" ForApproval"的文件夹中移动阅读电子邮件。回到收件箱。在Stack上找到了这个代码并且它的工作非常出色,但是当我尝试反转源和目标并将我的文件夹名称放入时 - 我得到:运行时错误' 424':需要对象(见下面的截图)
有人可以快速浏览并说出这里有什么问题吗?
原始代码:
Sub ReadMailMover()
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
**Set objFolderSrc = objNamespace.GetDefaultFolder(olFolderInbox)**
**Set objFolderDst = objFolderSrc.Parent.folders("__Reviewed")**
Set colitems = objFolderSrc.Items
Set colfiltereditems = colitems.Restrict("[UnRead] = False")
For intMessage = colfiltereditems.Count To 1 Step -1
colfiltereditems(intMessage).Move objFolderDst
Next
End Sub
我的反转版本:
Sub ReadMailMover()
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
**Set objFolderSrc = objFolderSrc.Parent.Folders("ForApproval")**
**Set objFolderDst = objNamespace.GetDefaultFolder(olFolderInbox)**
Set colitems = objFolderSrc.Items
Set colfiltereditems = colitems.Restrict("[UnRead] = False")
For intMessage = colfiltereditems.Count To 1 Step -1
colfiltereditems(intMessage).Move objFolderDst
Next
End Sub
答案 0 :(得分:2)
在反向代码中,初始化变量 objFolderSrc 时,它包含对自身的引用。
Set objFolderSrc = objFolderSrc.Parent.Folders("ForApproval")
此时 objFolderSrc 未初始化。它没有引用任何东西。因此,它不能用于定义位置。
请改为尝试:
Set objFolderSrc = application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("ForApproval")
此处循环引用已被替换。您的源文件夹通过收件箱引用。