Está en la página 1de 4

Buscar correo

Método Application.AdvancedSearch (Outlook) | Microsoft Docs

Ejemplo
En el siguiente Visual Basic para Aplicaciones (VBA) se busca en la Bandeja de
entrada elementos con asunto igual a Test y se muestran los nombres de los
remitentes de los elementos de correo electrónico devueltos por la búsqueda. El
procedimiento de evento AdvancedSearchComplete establece el
booleano blnSearchComp en True cuando finaliza la búsqueda. Esta variable
booleana es utilizada por el procedimiento TestAdvancedSearchComplete() para
determinar cuándo finaliza la búsqueda. El código de ejemplo debe ubicarse en
un módulo de clase como ThisOutlookSessiony, a continuación, se debe llamar al
procedimiento de TestAdvancedSearchComplete() antes de que se puede llamar al
procedimiento de evento por Outlook.

VBCopiar
Public blnSearchComp As Boolean

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)


Debug.Print "The AdvancedSearchComplete Event fired"
If SearchObject.Tag = "Test" Then
m_SearchComplete = True
End If

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 = 'Test'"
Const strS As String = "Inbox"
Set sch = Application.AdvancedSearch(strS, strF, "Test")
While blnSearchComp = False
DoEvents
Wend
Set rsts = sch.Results
For i = 1 To rsts.Count
Debug.Print rsts.Item(i).SenderName
Next
End Sub

En el siguiente ejemplo Visual Basic para Aplicaciones microsoft usa el método


AdvancedSearch para crear una nueva búsqueda. Los parámetros de la
búsqueda, especificados por el argumento Filter del
método AdvancedSearch, devolverán todos los elementos de las carpetas
Bandeja de entrada y Elementos enviados donde el asunto coincida o contenga
"Office". Las carpetas Bandeja de entrada y elementos enviados del usuario se
especifican como el ámbito de la búsqueda y la
propiedad SearchSubFolders se establece en True. Una vez completada la
búsqueda, se llama al método GetTable en el objeto Search para la
enumeración de resultados de búsqueda.

VBCopiar
Public m_SearchComplete As Boolean

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)


If SearchObject.Tag = "MySearch" Then
m_SearchComplete = True
End If
End Sub

Sub TestSearchForMultipleFolders()
Dim Scope As String
Dim Filter As String
Dim MySearch As Outlook.Search
Dim MyTable As Outlook.Table
Dim nextRow As Outlook.Row
m_SearchComplete = False
'Establish scope for multiple folders
Scope = "'" & Application.Session.GetDefaultFolder( _
olFolderInbox).FolderPath _
& "','" & Application.Session.GetDefaultFolder( _
olFolderSentMail).FolderPath & "'"
'Establish filter
If Application.Session.DefaultStore.IsInstantSearchEnabled Then
Filter = Chr(34) & "urn:schemas:httpmail:subject" _
& Chr(34) & " ci_phrasematch 'Office'"
Else
Filter = Chr(34) & "urn:schemas:httpmail:subject" _
& Chr(34) & " like '%Office%'"
End If
Set MySearch = Application.AdvancedSearch( _
Scope, Filter, True, "MySearch")
While m_SearchComplete <> True
DoEvents
Wend
Set MyTable = MySearch.GetTable
Do Until MyTable.EndOfTable
Set nextRow = MyTable.GetNextRow()
Debug.Print nextRow("Subject")
Loop
End Sub
vba - Buscar el correo electrónico de Outlook (y responderlo) usando Excel VBA -
WebMonkez.com

Puede usar la función AdvancedSearch incorporada, que devuelve una objeto que contiene


elementos. Estos deben tener propiedades de fecha, por lo que solo necesita su código para
pasar por el objeto de búsqueda mailItems y encontrarlo con la última fecha
(ReceivedTime).
Sugeriría usar el ejemplo inferior en esa página: obtiene un objeto de tabla de la búsqueda y
luego usa
Set MyTable = MySearch.GetTable
Do Until MyTable.EndOfTable
Set nextRow = MyTable.GetNextRow()
Debug.Print nextRow("ReceivedTime")
Loop
A partir de ahí, puede hacer la comparación para encontrar la última hora y, si desea hacer
algo con el elemento de correo, deberá obtener la columna "EntryID" de la tabla. Luego use
el método GetItemFromID del objeto NameSpace para obtener un elemento completo, ya
que la tabla devuelve objetos de solo lectura.
También puede aplicar un filtro de fecha a la búsqueda si lo desea, si conocía una fecha
mínima, por ejemplo.

 2 
Verity 10 mar. 2016 a las 02:13

Para revisar todas las carpetas, haga esto: Revise una vez todas las carpetas principales en
Outlook y luego, para cada carpeta principal, revise cada subcarpeta. Si tiene más ramas, se
supone que debe agregar más niveles al código "para cada Folder3 en folder2.folders".
También en la cláusula if puedes probar la fecha del correo y pasar de la más nueva a la más
antigua. Configure oMsg.display para ver qué correo se está revisando
Public Sub FORWARD_Mail_STAT_IN()
Dim Session As Outlook.NameSpace
Dim oOutLookObject As New Outlook.Application
Dim olNameSpace As NameSpace
Dim oItem As Object
Dim oMsg As Object
Dim searchkey As String

Set oOutLookObject = CreateObject("Outlook.Application")


Set oItem = oOutLookObject.CreateItem(0)
Set olNameSpace = oOutLookObject.GetNamespace("MAPI")

Set Session = Application.Session


Set Folders = Session.Folders
For Each Folder In Folders 'main folders in Outlook

xxx = Folder.Name
For Each Folder2 In Folder.Folders 'all the subfolders from a main folder
yyy = Folder2.Name
Set oFolder = olNameSpace.Folders(xxx).Folders(yyy) 'in each folder we search all
the emails

For Z = oFolder.Items.Count To 1 Step -1 ' For Z = 1 To oFolder.Items.Count


With oFolder.Items(Z)
Set oMsg = oFolder.Items(Z)

If Format(oMsg.SentOn, "mm/dd/yyyy") = Format(Date, "mm/dd/yyyy")


And InStr(1, LCase(oMsg.Subject), searchkey, vbTextCompare) > 0 Then
oMsg.display
' insert code
End If
End With
Next Z
Next Folder2
Next Folder

También podría gustarte