【问题标题】:How do I move an email in Outlook to a subfolder?如何将 Outlook 中的电子邮件移动到子文件夹?
【发布时间】:2021-11-11 17:51:26
【问题描述】:

我正在尝试创建一个宏,它将我的 Outlook 收件箱中的项目移动到与收件箱处于同一级别的另一个文件夹的子文件夹(即,父文件夹不是收件箱的子文件夹)。这是我正在使用的代码:

Sub EventRequests()
On Error Resume Next

Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Outlook.MailItem

Set ns = Application.GetNamespace("MAPI")

'Define path to the target folder
Set moveToFolder = ns.Folders("Events").Folders("Event Requests")

If Application.ActiveExplorer.Selection.Count = 0 Then
   MsgBox ("Select an E-mail first")
   Exit Sub
End If

If moveToFolder Is Nothing Then
   MsgBox "Target folder not found!", vbOKOnly + vbExclamation, "Move Macro Error"
End If

For Each objItem In Application.ActiveExplorer.Selection
   If moveToFolder.DefaultItemType = olMailItem Then
      If objItem.Class = olMail Then
         objItem.Move moveToFolder
      End If
  End If
Next

Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing
End Sub

当我运行代码时,我收到一条错误消息“找不到目标文件夹!”我试过了 Set moveToFolder = ns.GetDefaultFolder(olFolderInbox).Folders("Events").Folders("Event Requests")Set MoveToFolder = ns.Folders("Mailbox - my name").Folders(targetFolder),但这些都不起作用。我有一个不同的宏设置,将我收件箱中的邮件移动到一个文件夹,该文件夹是我的收件箱的一个子文件夹,它工作正常:

Set moveToFolder = ns.GetDefaultFolder(olFolderInbox).Folders("Completed")

如何修复目标路径以使其指向正确的子文件夹?

【问题讨论】:

  • On Error Resume Next 在开始时是所有编程中最严重的错误。 cpearson.com/Excel/ErrorHandling.htm 将其移至 Set moveToFolder 添加 On Error GoTo 0 之前。假设“Events”文件夹直接位于邮箱下方。将文件夹树从默认收件箱向上导航到 Parent,然后向下导航到 Events 文件夹。 Set moveToFolder = ns.GetDefaultFolder(olFolderInbox).Parent.Folders("Events").Folders("Event Requests") 或直接使用Set MoveToFolder = ns.Folders("The mailbox name not literally Mailbox - my name").Folders("Events").Folders("Event Requests") 去那里
  • 我应该在我的评论前加上“我不知道我在做什么,我对此完全陌生,我在黑暗中摸索,所以我很乐意接受任何人的帮助和指导愿意付出。”我会阅读有关错误处理的内容,谢谢您的建议!
  • 我也在努力找出你给我的代码建议。当我输入第一个时,我得到一个错误,说我需要调试“If moveToFolder.DefaultItemType = olMailItem Then”
  • 没有人发布目标文件夹问题的官方答案,更新将使其无效。我相信您可以使用当前代码更新问题,并将标题和正文重新聚焦到有关错误的特定问题。
  • 直到今天我才能回去处理这个问题,当我运行新代码时,一切正常。我没有改变任何东西,但我不再收到错误。我使用了Set moveToFolder = ns.GetDefaultFolder(olFolderInbox).Parent.Folders("Events").‌​Folders("Event Requests") 的第一个建议,效果很好。

标签: vba email outlook


【解决方案1】:

我将继续发布我自己问题的答案,以便将来其他人遇到此问题时,他们可以看到我得出的代码有效:

Sub EventRequests()

Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Outlook.MailItem

Set ns = Application.GetNamespace("MAPI")

On Error GoTo 0
Set moveToFolder = ns.GetDefaultFolder(olFolderInbox).Parent.Folders("Events").Folders("Event Requests")


If Application.ActiveExplorer.Selection.Count = 0 Then
   MsgBox ("Select an E-mail first")
   Exit Sub
End If

If moveToFolder Is Nothing Then
   MsgBox "Target folder not found!", vbOKOnly + vbExclamation, "Move Macro Error"
End If

For Each objItem In Application.ActiveExplorer.Selection
   If moveToFolder.DefaultItemType = olMailItem Then
      If objItem.Class = olMail Then
         objItem.Move moveToFolder
      End If
  End If
Next

Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing
End Sub

【讨论】: