VBA Search in Outlook

后端 未结 2 1508
自闭症患者
自闭症患者 2020-12-03 02:16

I have this code to search in my folder. I do have a e-mail with the \"sketch\" subject, but VBA is not finding it (it goes to the ELSE clause)

Can anybody tell wha

相关标签:
2条回答
  • 2020-12-03 02:33

    Here is a way to do the search using Items Restrict.

    This runs fast and you do not need to loop through the items to find the items that match the search criteria.

    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 讨论(0)
  • 2020-12-03 02:36

    The reason your .Find isn't working is because Items.Find doesn't support the use of wildcards. Items.Find also doesn't support searching partial strings. So to actually find the email, you'd need to remove the wildcards and include the entire string in your search criteria.

    So here are your options:

    If you know the full subject line you're looking for, modify your code like so:

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

    If you don't (or won't) know the full subject, you can loop through your inbox folder and search for a partial subject line like so:

    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
    

    Hope that helps!

    0 讨论(0)
提交回复
热议问题