Мне нужно взять данные из темы писем и использовать их для создания / сортировки писем.
Данные начинаются с цифры 8 и состоят из 6 символов. Иногда ему предшествует заголовок «BU #», «BU» и т. д. Как только я выберу один кейс, я могу скопировать его для других сценариев.
Прямо сейчас я использую ручной макрос для сортировки элементов по папкам и ввода BU. Я хотел бы вытащить данные из темы, чтобы я мог выделить группу писем и запустить макрос, чтобы он сортировал их по папкам BU.
Это то, что у меня есть для ручной сортировки.
Sub MoveToFiled()
On Error Resume Next
Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Outlook.MailItem
Dim Myvalue As String
Dim myFolder As Outlook.folder
Dim myNewFolder As Outlook.folder
Set ns = Application.GetNamespace("MAPI")
Myvalue = InputBox("Enter BU", "Input")
'Define path to the target folder
Set myFolder = ns.Folders("Current Projects").Folders("BU")
Set myNewFolder = myFolder.Folders.Add(Myvalue)
Set moveToFolder = ns.Folders("Current Projects").Folders("BU").Folders(Myvalue)
Set Conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox ("No item selected")
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.UnRead = False
objItem.FlagStatus = olNoFlag
objItem.Move moveToFolder
objItem.Categories = ""
objItem.Save
End If
End If
Next
Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing
Set myFolder = Nothing
End Sub
Для справки это то, что я придумал для рекурсивной функции, которая захватывает BU из объекта, создает папку, перемещает материал ...
Sub MoveToFiledAUTO()
On Error Resume Next
Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Object
Dim Myvalue As String
Dim myFolder As Outlook.folder
Dim myNewFolder As Outlook.folder
Set ns = Application.GetNamespace("MAPI")
Dim vSplit As Variant
Dim sWord As Variant
Dim minisplit As Variant
Dim objSelection As Outlook.Selection
Set Conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
Set myFolder = ns.Folders("Current Projects").Folders("BU")
If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox ("No item selected")
Exit Sub
End If
Set objSelection = Outlook.Application.ActiveExplorer.Selection
For Each objItem In objSelection
If TypeOf objItem Is MailItem Then
subby = objItem.subject
vSplit = Split(subby)
For Each sWord In vSplit
If Left$(sWord, 1) = "8" And Len(sWord) = 6 Then
Myvalue = Left$(sWord, 6)
Exit For
ElseIf Left$(sWord, 2) = "#8" And Len(sWord) = 7 Then
Myvalue = Mid$(sWord, 2, 6)
Exit For
ElseIf Left$(sWord, 4) = "BU#8" And Len(sWord) = 9 Then
Myvalue = Mid$(sWord, 4, 6)
Exit For
ElseIf Left$(sWord, 3) = "U#8" And Len(sWord) = 8 Then
Myvalue = Mid$(sWord, 3, 6)
Exit For
ElseIf Left$(sWord, 3) = "BU8" And Len(sWord) = 8 Then
Myvalue = Mid$(sWord, 3, 6)
Exit For
ElseIf Left$(sWord, 1) = "8" And Len(sWord) = 7 Then
Myvalue = Left$(sWord, 6)
Exit For
Else
End If
Next
Set myNewFolder = myFolder.Folders.Add(Myvalue)
Set moveToFolder = ns.Folders("Current Projects").Folders("BU").Folders(Myvalue)
If moveToFolder Is Nothing Then
MsgBox "Target folder not found!", vbOKOnly + vbExclamation, "Move Macro Error"
End If
If moveToFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
objItem.UnRead = False
objItem.FlagStatus = olNoFlag
objItem.Move moveToFolder
objItem.Categories = ""
objItem.Save
End If
End If
End If
Next
Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing
Set myFolder = Nothing
End Sub
Это вытаскивает BU из темы сообщения, создает папку и отправляет почту в архив. Спасибо!
@ 0m3r Вот два разных примера строки темы. Тот, который я опубликовал выше, кажется, работает, но я всегда открыт для большей эффективности. RE: BU - 888889, имя сайта - DOWNTOWN SEGUIN, идентификатор приложения - 428422, идентификатор сайта клиента - SX2323, имя сайта клиента - DOWNTOWN SEGUIN ********* и RE: RFX # для структурных: BU - 888888, Имя сайта - FM 407 / MORRISS, идентификатор приложения - 434334, идентификатор сайта клиента - DX7343, имя сайта клиента - FM 407 / MORRISS
Итак, каково будет имя папки? БУ - 888889?
на основе вышеизложенного. Он создает папку с именем 888889 в каталоге Outlook Current Projects / BU / ---- вот так -> Set moveToFolder = ns.Folders ("Current Projects"). Folders ("BU"). Папки (Myvalue)
Это должно помочь вам начать:
Public Function GetBUNumber(sSubject As String) As String
Dim vSplit As Variant
Dim sWord As Variant
vSplit = Split(sSubject, " ")
For Each sWord In vSplit
If IsNumeric(sWord) Then
If Left$(sWord, 1) = "8" And Len(sWord) = 6 Then
GetBUNumber = sWord
Exit Function
End If
End If
Next
GetBUNumber = "Not Found"
End Function
Затем вы можете вызвать эту функцию с помощью Myvalue
следующим образом:
Dim sFound as String
sFound = GetBUNumber(Myvalue)
Он либо вернет шестизначное число, начинающееся с 8, либо «Не найдено».
Обновлено: похоже, вам нужно немного больше инструкций
Измените эту строку в своем коде:
Myvalue = InputBox("Enter BU", "Input")
к этому
Myvalue = GetBUNumber(InputBox("Enter BU", "Input"))
If Myvalue = "Not Found" Then
MsgBox "BU Number not found."
Exit Sub
End If
Эта функция запускается, когда я помещаю вызов в свой основной макрос, но он переходит от Vsplit = Split (ssubject, "") к getbunumber not found. Я называю это именно так, как вы это выразились. ---- Имеет ли значение, может ли субъект иметь другие данные, а не только номер BU и BU? - IE> RE: BU - 8XXXXX, имя сайта - COMSTOCK, идентификатор приложения - XXXXXX, идентификатор сайта клиента - SXXXXX, клиент Название сайта - КОМСТОК
Глядя на это, кажется, что sSubject не связан со строкой темы ... это то, где он может зависнуть?
Я добавил для вас еще немного инструкции.
Не могли бы вы взглянуть на то, что я придумал при редактировании основного поста. Это вроде как работает, но только один элемент - если выбрано несколько почтовых элементов, он останавливается после первого и сообщает, что не может найти папку --- Есть предложения?
Поэтому я исправил, что он может выполнять несколько элементов, теперь он просто застревает, если есть текст до / после BU - IE BU874893 или BU 847399, - Любая помощь, чтобы обойти это, была бы оценена.
Можете ли вы опубликовать 1 или 2 примера темы?