2014-02-04 4 views
8

У меня есть этот код для поиска в моей папке. У меня есть электронное письмо с предметом «эскиза», но VBA его не находит (он переходит в предложение ELSE)VBA Поиск в Outlook

Может кто-нибудь сказать, что не так?

Set olApp = GetObject(, "Outlook.Application") 

Set olNs = olApp.GetNamespace("MAPI") 
Set olFldr = olNs.GetDefaultFolder(olFolderInbox) 
Set olItms = olFldr.Items 

Set Mail = olItms.Find("[Subject] = ""*sketch*""") 'Tracking 
If Not (Mail Is Nothing) Then 
    'use mail item here 

Else 
    NoResults.Show 
End If 

ответ

8

Причина ваш .Find не работает, потому что Items.Find не поддерживает использование подстановочных символов. Items.Find также не поддерживает поиск частичные струны. Чтобы на самом деле найти электронное письмо, вам нужно удалить подстановочные знаки и включить всю строку в критерии поиска.

Так вот ваши варианты:

Если вы знаете полную сюжетную линию, которую вы ищете, модифицирующие свой код следующим образом:

Set Mail = olItms.Find("[Subject] = ""This Sketch Email""") 

Если вы не (или не будет) знать полную тему, вы можете перебрать папку Входящие и поиск частичной сюжетной линии, как так:

UNTESTED

Sub Search_Inbox() 

Dim myOlApp As New Outlook.Application 
Dim myNameSpace As Outlook.NameSpace 
Dim myInbox As Outlook.MAPIFolder 
Dim myitems As Outlook.Items 
Dim myitem As Object 
Dim Found As Boolean 

Set myNameSpace = myOlApp.GetNamespace("MAPI") 
Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) 
Set myitems = myInbox.Items 
Found = False 

For Each myitem In myitems 
    If myitem.Class = olMail Then 
     If InStr(1, myitem.Subject, "sketch") > 0 Then 
      Debug.Print "Found" 
      Found = True 
     End If 
    End If 
Next myitem 

'If the subject isn't found: 
If Not Found Then 
    NoResults.Show 
End If 

myOlApp.Quit 
Set myOlApp = Nothing 

End Sub 

Надеюсь, что это поможет!

+0

Код отличный, человек. Я попробую сейчас. Не могли бы вы объяснить, почему двойные кавычки в ("[Subject] =" "This Sketch Email" "")? – AndroidDev

+0

Двойные кавычки используются, потому что в строке есть строка. Без двойных кавычек компилятор думал бы, что до конца строки он дошел до конца. [СМОТРИТЕ ЭТО] (http://www.techrepublic.com/blog/microsoft-office/5-rules-for-embedding-strings-in-vba-code/) для получения дополнительной информации. – ARich

+0

Я понял! И код работал отлично .. Большое спасибо, человек! – AndroidDev

15

Ниже приведен способ поиска с использованием Ограничения элементов.

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

Sub Search_Inbox() 

Dim myOlApp As New Outlook.Application 
Dim objNamespace As Outlook.NameSpace 
Dim objFolder As Outlook.MAPIFolder 
Dim filteredItems As Outlook.Items 
Dim itm As Object 
Dim Found As Boolean 
Dim strFilter As String 


Set objNamespace = myOlApp.GetNamespace("MAPI") 
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox) 

strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%sketch%'" 

Set filteredItems = objFolder.Items.Restrict(strFilter) 

If filteredItems.Count = 0 Then 
    Debug.Print "No emails found" 
    Found = False 
Else 
    Found = True 
    ' this loop is optional, it displays the list of emails by subject. 
    For Each itm In filteredItems 
    Debug.Print itm.Subject 
    Next 
End If 


'If the subject isn't found: 
If Not Found Then 
    'NoResults.Show 
Else 
    Debug.Print "Found " & filteredItems.Count & " items." 

End If 

'myOlApp.Quit 
Set myOlApp = Nothing 

End Sub 
+0

работает как рекламируется - спасибо - в outlook 2010. Следующий вопрос, как сортировать дату или получить последнее письмо. – ozmike

+0

Кажется, будет сортироваться по Полученному времени, но этот код также сортирует для вас filterItems.Sort "[ReceivedTime]", работает , также itm может быть типа Dim itm как Outlook.MailItem помогает получить свойства. – ozmike

+0

Как это можно изменить для поиска в теле и в приложениях? Это, похоже, не работает 'strFilter =" @ SQL = "& Chr (34) &" urn: schemas: httpmail: body "& Chr (34) &" like "% 153915% '' – skatun

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