Как классифицировать несколько вложений разных типов файлов или критериев - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь автоматизировать некоторые из моих писем, и я сталкиваюсь с тем, что когда, например, файл «.dwg» сначала найден, а «.jpg» также прикреплен, он только классифицирует мое электронное письмо от "Собственных файлов" и не относится к категории "Фотографии".

    Dim olkAtt As Outlook.Attachment
    'Check each attachment
    For Each olkAtt In item.Attachments
        'If the attachments file name ends with .dwg
        If Right(LCase(olkAtt.FileName), 4) = ".dwg" Then
            'Categorize email
            item.Categories = "Native Files"
            item.Save

        'If the attachments file name ends with .dxf
        ElseIf Right(LCase(olkAtt.FileName), 4) = ".dxf" Then
            'Categorize email
            item.Categories = "Native Files"
            item.Save

        'If the attachments file name ends with .jpg
        ElseIf Right(LCase(olkAtt.FileName), 4) = ".jpg" Then
            'Categorize email
            item.Categories = "Photos"
            item.Save

        'If the attachments file name ends with .xlsx
        ElseIf Right(LCase(olkAtt.FileName), 5) = ".xlsx" Then
            'Categorize email
            item.Categories = "Native Files"
            item.Save

        ElseIf InStr(0, LCase(olkAtt.FileName), "RFI") <> 0 Then
            'Categorize email
            item.Categories = "RFI/DCN/FCN"
            item.Save

            End If
    Exit For
    Next
    Set olkAtt = Nothing
End Sub

Я думал, что это будет смотреть на каждое вложение, проходить через операторы if и затем классифицировать электронную почту для каждого вложения (я хочу, чтобы электронные письма имели несколько категорий, если есть несколько случаев файлов).

Любая помощь приветствуется.

EDIT:

После некоторой помощи от Тима вот обновленный код:

Sub Categorize_Emails(item As Outlook.MailItem)
    Dim olkAtt As Outlook.Attachment, attName As String
    'Check each attachment
    For Each olkAtt In item.Attachments

    attName = LCase(olkAtt.FileName)
        'If the attachment is an RFI or DCN or FCN
        If InStr(LCase(attName), "rfi") <> 0 Or InStr(LCase(attName), "dcn") <> 0 Or InStr(LCase(attName), "fcn") <> 0 Then
            'Categorize email
            AddCategory item, "RFI/DCN/FCN"

        'If the attachments file name ends with .jpg
        ElseIf Right(LCase(olkAtt.FileName), 4) = ".jpg" Then
            'Categorize email
            AddCategory item, "Photos"

        'If the attachments file name ends with .dwg or .dxf or .xlsx
        ElseIf Right(LCase(olkAtt.FileName), 4) = ".dwg" Or Right(LCase(olkAtt.FileName), 4) = ".dxf" Or Right(LCase(olkAtt.FileName), 5) = ".xlsx" Then
            'Categorize email
            AddCategory item, "Native Files"

            End If

    Next olkAtt
    Set olkAtt = Nothing
End Sub


'add a category to an item if it doesn't already exist
Sub AddCategory(itm, cat)
    Const SEP As String = ";"
    Dim c, bExists As Boolean
    If Len(itm.Categories) = 0 Then
        itm.Categories = cat
        itm.Save
    Else
        arr = Split(itm.Categories, SEP)
        For Each c In arr
            If c = cat Then
                bExists = True
                Exit For
            End If
        Next c
        If Not bExists Then
            itm.Categories = Join(arr, SEP) & SEP & cat 'add if not present
            itm.Save
        End If
    End If
End Sub

1 Ответ

0 голосов
/ 05 июня 2019

https://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem.categories

Категории - это строка с разделителями имен категорий, которые были назначены элементу Outlook.В этом свойстве в качестве разделителя для нескольких категорий используется символ, указанный в имени значения sList в разделе HKEY_CURRENT_USER \ Control Panel \ International в реестре Windows.Чтобы преобразовать строку имен категорий в массив имен категорий, используйте функцию Microsoft Visual Basic Split

Так что-то вроде этого (не проверено):

Sub Tester()

    Dim olkAtt As Outlook.Attachment, attName As String

    '...
    '...

    'Check each attachment
    For Each olkAtt In Item.Attachments

        attName = LCase(olkAtt.Filename)

        If Right(attName, 4) = ".dwg" Or Right(attName, 4) = ".dxf" Or _
           Right(attName, 5) = ".xlsx" Then

           AddCategory Item, "Native Files"
        ElseIf Right(attName, 4) = ".jpg" Then
            AddCategory Item, "Photos"
        ElseIf InStr(0, attName, "RFI") <> 0 Then
            AddCategory Item, "RFI/DCN/FCN"
        End If
        'Exit For  '???
    Next
    Set olkAtt = Nothing
End Sub

'add a category to an item if it doesn't already exist
Sub AddCategory(itm, cat)
    Const SEP As String = ","
    Dim c, bExists As Boolean
    If Len(itm.Categories) = 0 Then
        itm.Categories = cat
        itm.Save
    Else
        arr = Split(itm.Categories, SEP)
        For Each c In arr
            If c = cat Then
                bExists = True
                Exit For
            End If
        Next c
        If Not bExists Then
            itm.Categories = Join(arr, SEP) & SEP & cat 'add if not present
            itm.Save
        End If
    End If
End Sub
...