2015-05-22 4 views
0

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

,, 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 = "" Для каждого вывода в dict.Keys тзд = тзд & Ø & "" & Dict (о) & vbCrLf 'MsgBox тзд Следующая Печать # 1, сообщ Закрыть # 1 ' Write вывод в файл

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

End Sub

Функция GetDate (дт As Date) As String GetDate = Год (дт) & "-" & месяц (дт) & "-" & день (дт) End Function

ответ

1

Вы должны проверить тип элемента в коде:

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 
0

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

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

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

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

Смежные вопросы