Классификация входящих по Regex вызывает: Application_NewMail: несоответствие байтового значения - PullRequest
2 голосов
/ 18 октября 2019

Я работаю для макросов VBA в Outlook 2010, чтобы фильтровать и классифицировать входящие сообщения в разных папках. Правило упоминается в целевом объекте. Когда речь идет о реализации и тестировании, вместо успешной фильтрации он выдает окна с сообщениями об ошибках. Подскажите, пожалуйста, в каком разделе по умолчанию вызов Application_NewMail будет продолжен?

Цель:

извлечение слов в [этом скобке]

Тема: [ABC] -> создать папку входящих сообщений ABC

Тема: [CMX] -> создать папку входящих сообщений ABC

Тема: CMX -> создать папку входящих сообщений CMX

Тема: INC000000156156 -> создать папку входящихпапка INC и подпапка INC000000156156

Язык программирования: VBA Macro

Версия Outlook: 2010

Вот мой код, и я понятия не имеюо том, как создавать папки, если они пустые, и назначать электронную почту для папки:

Private Sub Application_NewMail()

    Dim olFld As Outlook.MAPIFolder
    Set olFld = Outlook.Session.GetDefaultFolder(olFolderInbox)
    olFld.Items.Sort "[ReceivedTime]", False
    Dim olMail As Outlook.MailItem
    Set olMail = olFld.Items.GetFirst
    MyNiftyFilter olMail
End Sub

Private Sub MyNiftyFilter(Item As Outlook.MailItem)
    Debug.Print Item
    Debug.Print Item.Subject

    Dim Matches As Variant
    Dim RegExp As New VBScript_RegExp_55.RegExp
    Dim Pattern As String

    Dim Email_Subject As String

    Pattern = "(([\w-\s]*)\s*)"

    Email_Subject = Item.Subject

    With RegExp
        .Global = False
        .Pattern = Pattern
        .IgnoreCase = True
    Set Matches = .Execute(Email_Subject)
    End With

        If Matches.Count > 0 Then


        End If

    Set RegExp = Nothing
    Set Matches = Nothing
    Set Item = Nothing

End Sub

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Ваш Sub Application_NewMail () объявляет, но никогда не инициализирует переменную Item. Вместо этого используйте событие NewMailEx - оно передает новый идентификатор записи сообщения, который можно использовать для вызова Application.Session.GetItemFromID.

1 голос
/ 18 октября 2019

Вы либо используете ItemAdd event https://stackoverflow.com/a/58428753/4539709, либо фиксируете NewMail на

Private Sub Application_NewMail()
    Dim Item As Outlook.MailItem
    MyNiftyFilter Item
End Sub

Событие NewMail срабатывает, когда новоесообщения поступают в папку «Входящие» и до обработки правил клиента. Если вы хотите обработать элементы, поступающие в папку «Входящие», рассмотрите возможность использования события ItemAdd в коллекции элементов в папке «Входящие». Событие ItemAdd передает ссылку на каждый элемент, добавляемый в папку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...