outlook vba regex для каждого почтового элемента в массиве

Я использую код ниже, чтобы создать вывод, показывающий, сколько писем было в определенной папке в день. Это все работает нормально... Мой вопрос в разделе с XXXXX, как я могу ссылаться на каждый элемент почты, чтобы я мог сделать регулярное выражение для шаблона слова? Конечная цель - узнать, сколько писем содержало ключевое слово в данный день. Желаемый результат выглядит примерно так:

,, 2015-01-01,15,2,5 2015-01-01,23,22,0......

Я в порядке, чтобы выяснить код для определения количества электронных писем на основе ключевого слова, просто не знаю, как ссылаться на сообщения электронной почты на основе кода, как сегодня...

Спасибо за совет.

Sub HowManyEmails ()

Dim objOutlook As Object, objnSpace As Object, objFolder As MAPIFolder
Dim EmailCount As Integer
Set objOutlook = CreateObject("Outlook.Application")
Set objnSpace = objOutlook.GetNamespace("MAPI")

On Error Resume Next
Set objFolder = objnSpace.Folders("Personal Folders").Folders("Inbox").Folders("jobs.keep")
If Err.Number <> 0 Then
    Err.Clear
    MsgBox "No such folder."
    Exit Sub
End If

EmailCount = objFolder.Items.Count
MsgBox "Number of emails in the folder: " & EmailCount, , "email count"

Dim dateStr As String
Dim myItems As Outlook.Items
Dim dict As Object
Dim msg As String
Set dict = CreateObject("Scripting.Dictionary")
Set myItems = objFolder.Items
myItems.SetColumns ("SentOn")
' Determine date of each message:
For Each myItem In myItems

    xxxxxxx
    xxxxxxx
    xxxxxxx

    dateStr = GetDate(myItem.SentOn)
    If Not dict.Exists(dateStr) Then
        dict(dateStr) = 0
    End If
    dict(dateStr) = CLng(dict(dateStr)) + 1
Next myItem

'Записать вывод в файл Dim enviro As String enviro = CStr(Environ("USERPROFILE")) FILEPATH = enviro & "\Desktop\emails.csv" Открыть FILEPATH для вывода как 1 msg = "" Для каждого o В dict.Keys msg = msg & o & "," & dict(o) & vbCrLf 'MsgBox msg Next Print #1, msg Close #1 ' Записать вывод в файл

Set objFolder = Nothing
Set objnSpace = Nothing
Set objOutlook = Nothing

End Sub

Функция GetDate(dt As Date) в виде строки GetDate = Year(dt) & "-" & Month(dt) & "-" & Day(dt) End Function

2 ответа

Вам необходимо проверить тип элемента в вашем коде:

Dim myMailItem As Outlook.mailItem
....

For each myItem in myItems
    If TypeOf myItem Is MailItem Then
        Set myMailItem = myItem

         XXXXXXXXXXX and rest of code here use myMailItem instead of myItem to get info

    End If
Next myItem

Прежде всего, я бы рекомендовал использовать методы Find/ FindNext или Restrict класса Items, чтобы найти подмножество элементов, соответствующих указанному условию. Перебор всех элементов в папке может занять много времени.

objnSpace.Folders ("Личные папки"). Папки ("Входящие")

Используйте метод GetDefaultFolder класса Namespace, чтобы получить папку, которая представляет папку по умолчанию запрошенного типа для текущего профиля.

Outlook использует значения EntryID для уникальной идентификации элементов Outlook. Посмотрите Работу с EntryIDs и StoreIDs для получения дополнительной информации. Если вам известны идентификаторы элемента и папки, в которой он хранится, вы можете напрямую ссылаться на этот элемент, используя метод NameSpace.GetItemFromID.

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