vba - recuperar - Iterar todos los elementos de correo electrónico en una carpeta específica de Outlook
recuperar correos archivados outlook (3)
El formato es:
Set objFolder = objFolder.Folders("Inbox").Folders("mySubFolder1").Folders("mySubFolder2")
Como se aconseja en un comentario "mueve la siguiente línea de artículo a antes de la etiqueta ProgramExit"
¿Cómo puedo en una macro de Outlook VBA iterar todos los elementos de correo electrónico en una carpeta específica de Outlook (en este caso, la carpeta no pertenece a mi inbux personal sino que es una subcarpeta en la bandeja de entrada de un buzón compartido).
Algo como esto, pero nunca he hecho una macro de Outlook ...
For each email item in mailboxX.inbox.mySubfolder.items
// do this
next item
Intenté esto pero la subcarpeta de la bandeja de entrada no se encuentra ...
Private Sub Application_Startup()
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders("myGroupMailbox")
Set objFolder = objFolder.Folders("Inbox/mySubFolder1/mySubFolder2")
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
For Each Item In objFolder.Items
If TypeName(Item) = "MailItem" Then
Set Msg = Item
If new_msg.Subject Like "*myString*" Then
strBody = myItem.Body
Dim filePath As String
filePath = "C:/myFolder/test.txt"
Open filePath For Output As #2
Write #2, strBody
Close #2
End If
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
Next Item
End Sub
En mi caso, lo siguiente funcionó:
Sub ListMailsInFolder()
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders.GetFirst '' folders of your current account
Set objFolder = objFolder.Folders("Foldername").Folders("Subfoldername")
For Each Item In objFolder.Items
If TypeName(Item) = "MailItem" Then
'' ... do stuff here ...
Debug.Print Item.ConversationTopic
End If
Next
End Sub
Del mismo modo, también puede iterar a través de elementos de calendario:
Private Sub ListCalendarItems()
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
Set olRecItems = olNS.GetDefaultFolder(olFolderTasks)
strFilter = "[DueDate] > ''1/15/2009''"
Set olFilterRecItems = olRecItems.Items.Restrict(strFilter)
For Each Item In olFilterRecItems
If TypeName(Item) = "TaskItem" Then
Debug.Print Item.ConversationTopic
End If
Next
End Sub
Tenga en cuenta que este ejemplo utiliza el filtrado y también .GetDefaultFolder(olFolderTasks)
para obtener la carpeta integrada para los elementos del calendario. Si desea acceder a la bandeja de entrada, por ejemplo, use olFolderInbox
.
Sub TheSub()
Dim objNS As Outlook.NameSpace
Dim fldrImAfter As Outlook.Folder
Dim Message As Outlook.MailItem
''This gets a handle on your mailbox
Set objNS = GetNamespace("MAPI")
''Calls fldrGetFolder function to return desired folder object
Set fldrImAfter = fldrGetFolder("Folder Name Here", objNS.Folders)
For Each Message In fldrImAfter.Items
MsgBox Message.Subject
Next
End Sub
Función recursiva para recorrer todas las carpetas hasta que se encuentre el nombre de la carpeta especificada ....
Function fldrGetFolder( _
strFolderName As String _
, objParentFolderCollection As Outlook.Folders _
) As Outlook.Folder
Dim fldrSubFolder As Outlook.Folder
For Each fldrGetFolder In objParentFolderCollection
''MsgBox fldrGetFolder.Name
If fldrGetFolder.Name = strFolderName Then
Exit For
End If
If fldrGetFolder.Folders.Count > 0 Then
Set fldrSubFolder = fldrGetFolder(strFolderName,
fldrGetFolder.Folders)
If Not fldrSubFolder Is Nothing Then
Set fldrGetFolder = fldrSubFolder
Exit For
End If
End If
Next
End Function