para macro informaciĆ³n exportar ejemplos datos correos application vba outlook outlook-addin outlook-vba outlook-object-model

macro - outlook.application vba



Obtener bandejas de entrada desde Outlook (5)

¿Esto te muestra todas las bandejas de entrada disponibles?

Sub LoopThroughInboxes Dim ol As Outlook.Application Dim ns As Outlook.NameSpace Dim i As Long Set ol = Outlook.Application Set ns = ol.GetNamespace("MAPI") For i = 1 To ns.Folders.Count Debug.Print ns.Folders(i).Name Next i

Si es así, ns.Folders(i).Folders("Inbox") obtendrá la Bandeja de entrada para cada buzón.

Configuré dos cuentas de Exchange en Outlook 2010, sin embargo, no puedo averiguar cómo llegar a la bandeja de entrada de la segunda cuenta. Session.GetDefaultFolder() siempre devuelve el primero.

Incluso enumerando Session.Accounts, encontrando la cuenta correcta y llamando a Session.Account(found one).Store.GetDefaultFolder() devuelve Inbox incorrecto (desde la cuenta de intercambio predeterminada, no desde la secundaria).


Ir a la biblioteca de Mapix

Enlace de la biblioteca de Mapix como se indica a continuación

Biblioteca de Mapix para C ++ / MFC

Nota: Esta biblioteca es válida para los correos electrónicos de la Bandeja de entrada en MS Outlook


Supongo que este es viejo, pero alguien podría necesitarlo algún día. Aquí está el código para iterar todas las carpetas de "Correo enviado" en Outlook. (Creo que esto solo funcionará para Outlook 2010 y más reciente).

MSOutlook._NameSpace ns = Globals.ThisAddIn.Application.GetNamespace("MAPI"); var accounts = ns.Accounts; foreach (MSOutlook.Account account in accounts) { try { // You might want to test if DeliveryStore is null, in case this account is not an Exchange account MSOutlook.MAPIFolder sentFolder = account.DeliveryStore.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail); if(sentFolder != null) { SentItems = sentFolder.Items; SentItems.ItemAdd += LogMethods.Items_Sent_ItemAdd; } } catch (Exception e) { BaseClass.log.Log(LoggLevel.Warning, e.Message); } }


Tal vez hace tiempo que has dejado esta pregunta, pero aquí va ...

He tenido el mismo problema anteriormente y lo resolví agregando la API de administración de cuentas de Outlook. Desafortunadamente para ti, esta es una API orientada a C ++. (Mi complemento ya estaba desarrollado en c ++)

Además, el OOM (Modelo de objetos de Outlook) que VBA y los complementos de .NET usan tiene poca compatibilidad (si existe) para varias cuentas. Al agregar cuentas de intercambio, básicamente ha agregado varias cuentas a su perfil.

Por lo tanto, es posible que deba bajar un nivel, usar MAPI con c ++ y luego enganchar en la API de administración de cuentas de Outlook. Es mucho trabajo, pero eso es exactamente lo que hice y funcionó a las mil maravillas.

Además, aquí hay un ejemplo: http://www.codeproject.com/KB/IP/IOlkAccountManager.aspx


Use Store.GetDefaultFolder en lugar de Namespace.GetDefaultFolder. Tenga en cuenta que Store.GetDefaultFolder se agregó en Outlook 2010. En las versiones anteriores de Outlook, use MAPI extendido (C ++ o Delphi) o redención (RDOStore.GetDefaultFolder.