Categorisation of incoming by Regex arouse : Application_NewMail : Byte Val Mismatch

Viewed 94

I am working for the VBA Macros of Outlook 2010 to filter and categorize incoming emails into different folders. The rule is mentioned in the target When it comes to the implementation and testing, it does prompting error messages boxes instead of successful filtering. Would you please tell me what section under default call Application_NewMail shall proceed ?

Target :

extract words within [this Bracket]

Subject : [ABC] --> create inbox folder ABC

Subject : [CMX] --> create inbox folder ABC

Subject : CMX --> create inbox folder CMX

Subject : INC000000156156 --> create inbox folder INC and sub-folder INC000000156156

Programming Language : VBA Macro

Outlook Version : 2010

Here is my code and I have no clue on how to create folders if empty and assign email to the folder :

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 Answers

You either use ItemAdd event https://stackoverflow.com/a/58428753/4539709 or fix your NewMail to simply

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

The NewMail event fires when new messages arrive in the Inbox and before client rule processing occurs. If you want to process items that arrive in the Inbox, consider using the ItemAdd event on the collection of items in the Inbox. The ItemAdd event passes a reference to each item that is added to a folder.

You Application_NewMail() sub declares but never initializes the Item variable. Use NewMailEx event instead -it passes the new message entry id, whcih you can use to call Application.Session.GetItemFromID.

Related