Извлечение определенного строкового формата из темы для сортировки

Мне нужно взять данные из темы писем и использовать их для создания / сортировки писем.

Данные начинаются с цифры 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 из темы сообщения, создает папку и отправляет почту в архив. Спасибо!

Можете ли вы опубликовать 1 или 2 примера темы?

0m3r 03.05.2018 08:05

@ 0m3r Вот два разных примера строки темы. Тот, который я опубликовал выше, кажется, работает, но я всегда открыт для большей эффективности. RE: BU - 888889, имя сайта - DOWNTOWN SEGUIN, идентификатор приложения - 428422, идентификатор сайта клиента - SX2323, имя сайта клиента - DOWNTOWN SEGUIN ********* и RE: RFX # для структурных: BU - 888888, Имя сайта - FM 407 / MORRISS, идентификатор приложения - 434334, идентификатор сайта клиента - DX7343, имя сайта клиента - FM 407 / MORRISS

Collin Pinilis 03.05.2018 15:53

Итак, каково будет имя папки? БУ - 888889?

0m3r 03.05.2018 18:22

на основе вышеизложенного. Он создает папку с именем 888889 в каталоге Outlook Current Projects / BU / ---- вот так -> Set moveToFolder = ns.Folders ("Current Projects"). Folders ("BU"). Папки (Myvalue)

Collin Pinilis 03.05.2018 21:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
95
1

Ответы 1

Это должно помочь вам начать:

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, клиент Название сайта - КОМСТОК

Collin Pinilis 01.05.2018 19:11

Глядя на это, кажется, что sSubject не связан со строкой темы ... это то, где он может зависнуть?

Collin Pinilis 01.05.2018 19:23

Я добавил для вас еще немного инструкции.

braX 01.05.2018 21:07

Не могли бы вы взглянуть на то, что я придумал при редактировании основного поста. Это вроде как работает, но только один элемент - если выбрано несколько почтовых элементов, он останавливается после первого и сообщает, что не может найти папку --- Есть предложения?

Collin Pinilis 02.05.2018 16:20

Поэтому я исправил, что он может выполнять несколько элементов, теперь он просто застревает, если есть текст до / после BU - IE BU874893 или BU 847399, - Любая помощь, чтобы обойти это, была бы оценена.

Collin Pinilis 02.05.2018 16:41

Другие вопросы по теме