2014-01-15 4 views
0

Начиная с примера в http://msdn.microsoft.com/en-us/library/office/aa209973(v=office.11).aspx, мне удалось создать следующий блок кода, который ищет почтовый ящик Outlook для сообщений электронной почты, где строка темы начинается с определенного номера телефона «555-5555», используя «ci_startswith».Поиск номеров телефонов в строке темы сообщения

Public blnSearchComp As Boolean 

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search) 
    MsgBox "The AdvancedSearchComplete Event fired." 
    blnSearchComp = True 
End Sub 

Sub TestAdvancedSearchComplete() 
    Dim sch As Outlook.Search 
    Dim rsts As Outlook.Results 
    Dim i As Integer 
    blnSearchComp = False 
    Const strF As String = "urn:schemas:mailheader:subject ci_startswith '555-5555'" 
    Const strS As String = "Inbox" 
    Set sch = Application.AdvancedSearch(strS, strF) 
    While blnSearchComp = False 
     DoEvents 
    Wend 
    Set rsts = sch.Results 
    For i = 1 To rsts.Count 
     MsgBox rsts.Item(i).SenderName 
    Next 
End Sub 

Очевидно, что если сюжетная линия не начинается с точным номером телефона, в данном случае «555-55-55», поиск не находит электронную почту. Вместо «ci_startswith» я попытался использовать «похожее» сравнение, однако теперь этого не удается найти совпадения, в том числе найденные с помощью «ci_startswith».

Const strF As String = "urn:schemas:mailheader:subject like '555-5555'" 

Я использую "как" сравнение некорректно? Из того, что я читал, кажется, что он должен работать. Или это известная ошибка/проблема? Если да, есть ли способы обхода, которые обеспечивают более широкую способность поиска?

В конечном счете, я хотел бы использовать что-то вроде ниже, чтобы иметь возможность искать все возможные варианты номера телефона.

Const strF As String = "urn:schemas:mailheader:subject like '###-####'" 

Заранее благодарен!

--------- EDIT/ADD ---------

Public blnSearchComp As Boolean 

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As search) 
    MsgBox "The AdvancedSearchComplete Event fired." 
    blnSearchComp = True 
End Sub 

Sub TestAdvancedSearchComplete() 
    Dim sch As Outlook.search 
    Dim rsts As Outlook.Results 
    Dim i As Integer 
    blnSearchComp = False 
    Const strF As String = "urn:schemas:mailheader:subject LIKE '%###%'" 
    Const strS As String = "Inbox" 
    Set sch = Application.AdvancedSearch(strS, strF) 
    While blnSearchComp = False 
     DoEvents 
    Wend 
    Set rsts = sch.Results 
    For i = 1 To rsts.Count 
     MsgBox rsts.Item(i).SenderName 
    Next 
End Sub 

ответ

0

при использовании "LIKE" вы должны добавить символ% вокруг критериев в зависимости от того, как вы хотите найти

http://msdn.microsoft.com/en-us/library/office/cc513841(v=office.12).aspx

ключевое слово, как выполняет префикс, подстроку или соответствие эквивалентности. Токены (символы, слово или слова) привязаны к символу% определенным образом в зависимости от типа соответствия: например, «%» обеспечивает сопоставление префикса. Например, ограничение для типа «cat%» будет соответствовать «cat» и «catalog». например, «%%» обеспечивает подстроку. Например, ограничение типа «% cat%» будет соответствовать «cat», «catalog», «kittycat» и «decathlon». например, '' обеспечивает соответствие эквивалентности. Например, ограничение для типа «кошка» будет соответствовать «cat» и «RE: Cat».

+0

Спасибо, iambdot, за быстрый ответ! Я просто использовал «%» до и после строки поиска, как вы описали, и по-прежнему не находит совпадений, ранее найденных с помощью «ci_startswith». – phillip3196772

+0

Эта статья здесь (http://msdn.microsoft.com/en-us/library/office/aa140155 (v = office.10) .aspx) делает именно то, что вам нужно, и должно работать. Следуйте примерам .. также вы можете опубликовать свой измененный код – iambdot

+0

Просто добавлена ​​самая последняя версия кода. Если я заменил хэштегов фактическим числом, он найдет только те явные числа. Тем не менее, я бы хотел, чтобы он нашел все возможные экземпляры числа. – phillip3196772

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