Я організую всі свої повідомлення Outlook як розмови. Я шукаю функцію переміщення поточних вибраних повідомлень з папки "Вхідні" до відповідних папок.
Наприклад, якщо у мене є розмова по електронній пошті під назвою "Щотижневий звіт про стан", яка була подана в папку "Інженерія", і я отримую відповідь у папці "Вхідні", я хотів би запустити макрос і перенести відповідь на " Папку "Engineering".
Я використовую Outlook у Microsoft Office Professional Plus 2010.
Моя перша спроба вирішити проблематичні роботи, але хотіла б:
- Додайте функціональні можливості для об'єктів, які не належать до пошти;
- Очистіть
For Each
цикл, спочатку перевіряючи, чи всі кореневі елементи для розмови вказують на одну і ту ж таблицю. Якщо вони цього не роблять, я хотів би запропонувати користувачеві діалогове вікно вибору потрібної папки.
Ось моя поточна спроба:
Sub moveMailToConversationFolder()
Dim olNs As NameSpace
Dim Inbox As Outlook.MAPIFolder
Dim selectedItem As Object
Dim item As Outlook.mailItem ' Mail Item
Dim folder As Outlook.MAPIFolder ' Current Item's Folder
Dim conversation As Outlook.conversation ' Get the conversation
' Dim ItemsTable As Outlook.table ' Conversation table object
Dim mailItem As Object
Dim mailparent As Object
Set olNs = Application.GetNamespace("MAPI")
Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
' On Error GoTo MsgErr
' // Must Selected Item.
Set selectedItem = Application.ActiveExplorer.Selection.item(1)
' // If Item = a MailItem.
If TypeOf selectedItem Is Outlook.mailItem Then
Set item = selectedItem
Set conversation = item.GetConversation
If Not IsNull(conversation) Then
' Set ItemsTable = conversation.GetTable
' MsgBox conversation.GetRootItems.Count
For Each mailItem In conversation.GetRootItems ' Items in the conversation.
If TypeOf mailItem Is Outlook.mailItem Then
Set folder = mailItem.Parent
item.move GetFolder(folder.FolderPath)
End If
Next
End If
End If
End Sub
Function GetFolder(ByVal FolderPath As String) As Outlook.folder
Dim TestFolder As Outlook.folder
Dim FoldersArray As Variant
Dim i As Integer
On Error GoTo GetFolder_Error
If Left(FolderPath, 2) = "\\" Then
FolderPath = Right(FolderPath, Len(FolderPath) - 2)
End If
'Convert folderpath to array
FoldersArray = Split(FolderPath, "\")
Set TestFolder = Application.Session.Folders.item(FoldersArray(0))
If Not TestFolder Is Nothing Then
For i = 1 To UBound(FoldersArray, 1)
Dim SubFolders As Outlook.Folders
Set SubFolders = TestFolder.Folders
Set TestFolder = SubFolders.item(FoldersArray(i))
If TestFolder Is Nothing Then
Set GetFolder = Nothing
End If
Next
End If
'Return the TestFolder
Set GetFolder = TestFolder
Exit Function
GetFolder_Error:
Set GetFolder = Nothing
Exit Function
End Function