【问题标题】:Move selected email to folder based on InputBox value根据 InputBox 值将选定的电子邮件移动到文件夹
【发布时间】:2022-08-22 08:39:32
【问题描述】:

我想根据 InputBox 中的值移动电子邮件。

想法是,我选择一封或多封电子邮件并运行脚本。

  • InputBox 出现,我填入代表文件夹名称的 6 位数字。
  • 如果该文件夹存在于 Outlook 收件箱中的任何位置,请将选定的电子邮件移至该文件夹。
  • 如果文件夹不存在,则为 MsgBox(无此文件夹)。
  • 如果文件夹多次存在,则为 MsgBox(多条记录)。
  • 为了成为您的“第一个”Outlook 代码,请在互联网上进行一些研究,并向我们展示您自己尝试过的内容。即使它不能完全满足您的需求...
  • 我过去为 excel 编写了一些代码,但 outllok VBA 对我来说是新的。我也 trz 现在搜索网络,但大多数用于从主题移动电子邮件文本的代码,或者如果他们使用输入框,他们设法复制到 PC 中的文件夹。所以我有点困惑,不知道从哪里开始。
  • 您是否测试了那里建议的解决方案?如果您尝试了某些东西(从那里或从其他地方),您应该编辑您的问题,发布代码并解释您遇到麻烦的地方。错误,错误消息,没有消息,但它不能满足您的需要等。

标签: vba outlook


【解决方案1】:

使用MailItem(或任何Outlook 项目)的Move 方法将选定项目移动到文件夹。要找出在 Outlook 中选择了哪些项目,您可以使用 Explorer 类的 Selection 属性,该属性返回一个 Selection 对象,该对象包含在资源管理器窗口中选择的一个或多个项目。

Sub GetSelectedItems() 
 Dim myOlExp As Outlook.Explorer
 Dim myOlSel As Outlook.Selection 
 Dim mySender As Outlook.AddressEntry 
 Dim oMail As Outlook.MailItem 
 Dim oAppt As Outlook.AppointmentItem 
 Dim oPA As Outlook.PropertyAccessor 
 Dim MsgTxt As String 
 Dim x As Long 
 
 MsgTxt = "Senders of selected items:" 
 Set myOlExp = Application.ActiveExplorer 
 Set myOlSel = myOlExp.Selection 
 For x = 1 To myOlSel.Count 
   If myOlSel.Item(x).Class = OlObjectClass.olMail Then 
     ' For mail item, use the SenderName property. 
     Set oMail = myOlSel.Item(x) 
     MsgTxt = MsgTxt & oMail.SenderName & ";" 
   ElseIf myOlSel.Item(x).Class = OlObjectClass.olAppointment Then 
     ' For appointment item, use the Organizer property. 
     Set oAppt = myOlSel.Item(x) 
     MsgTxt = MsgTxt & oAppt.Organizer & ";" 
   End If 
 Next x 
 
 Debug.Print MsgTxt 
 
End Sub

例如,以下代码定位来自特定发件人的项目,然后将它们移动到子文件夹:

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("Personal Mail") 
 Set myItem = myItems.Find("[SenderName] = 'Eugene Astafiev'") 
 While TypeName(myItem) <> "Nothing" 
 myItem.Move myDestFolder 
 Set myItem = myItems.FindNext 
 Wend 
End Sub

要在 Outlook 中查找文件夹,您需要递归地遍历所有文件夹。 Outlook 对象模型不提供任何属性或方法来按文件夹名称查找文件夹。有关更多信息,请参阅Enumerate folders

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2017-05-20
    • 2012-11-21
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多