Inlezen Outlook Object via VBA

Status
Niet open voor verdere reacties.

richard99

Gebruiker
Lid geworden
17 apr 2010
Berichten
95
Ik wil de e-mailadressen van de e-mailberichten die ik in het verleden heb ontvangen via VBA uit de Outlook Object ophalen.
Heeft iemand van jullie dit al eerder gedaan en heb je kant-en-klare code liggen waarmee ik dit object onderzoeken?
Ik heb al wat gevonden maar hiermee kom ik er niet.

Dim myolApp As Outlook.Application
Dim myNamespace As Outlook.Namespace
Set myolApp = CreateObject("Outlook.Application")
Set myNamespace = myolApp.GetNamespace("MAPI")
Set myolApp.ActiveExplorer.CurrentFolder = myNamespace.GetDefaultFolder(olFolderInbox)
strEffe = myolApp.ActiveExplorer.CurrentFolder.Description
strEffe = myolApp.ActiveExplorer.CurrentFolder.Folders.Count

Ik zag dat je door de folders kan browsen en ik neem aan dat je zowel het e-mailbericht en dus ook het e-mailadres van verzender kan ophalen.
 
Je kan het ook in Excel doen en de verkregen gegevens direct in een werkblad schrijven. Dit is 1 van de vele voorbeelden op het internet. In de VB Editor moet je onder Extra en dan Verwijzingen de verwijzing naaar "Microsoft Outlook xx.x Object Library" aanvinken. De gegevens in het rood moet je even aanpassen:

Code:
Option Explicit
'This Code is Downloaded from OfficeTricks.com
'Visit this site for more such Free Code
Sub Download_Outlook_Mail_To_Excel()
    'Add Tools->References->"Microsoft Outlook nn.n Object Library"
    'nn.n varies as per our Outlook Installation
    Dim Folder As Outlook.MAPIFolder
    Dim sFolders As Outlook.MAPIFolder
    Dim iRow As Integer, oRow As Integer
    Dim MailBoxName As String, Pst_Folder_Name  As String
    
    'Mailbox or PST Main Folder Name (As how it is displayed in your Outlook Session)
    MailBoxName = "[COLOR="#FF0000"]edmoor@telfort.nl[/COLOR]"
 
    'Mailbox Folder or PST Folder Name (As how it is displayed in your Outlook Session)
    Pst_Folder_Name = "[COLOR="#FF0000"]Postvak in[/COLOR]" 'Sample "Inbox" or "Sent Items"
 
    'To directly a Folder at a high level
    'Set Folder = Outlook.Session.Folders(MailBoxName).Folders(Pst_Folder_Name)
    
    'To access a main folder or a subfolder (level-1)
    For Each Folder In Outlook.Session.Folders(MailBoxName).Folders
        If VBA.UCase(Folder.Name) = VBA.UCase(Pst_Folder_Name) Then GoTo Label_Folder_Found
        For Each sFolders In Folder.Folders
            If VBA.UCase(sFolders.Name) = VBA.UCase(Pst_Folder_Name) Then
                Set Folder = sFolders
                GoTo Label_Folder_Found
            End If
        Next sFolders
    Next Folder
 
Label_Folder_Found:
     If Folder.Name = "" Then
        MsgBox "Invalid Data in Input"
        GoTo End_Lbl1:
    End If
 
    'Read Through each Mail and export the details to Excel for Email Archival
    ThisWorkbook.Sheets(1).Activate
'    Folder.Items.Sort "Received"
    
    'Insert Column Headers
    ThisWorkbook.Sheets(1).Cells(1, 1) = "Sender"
    ThisWorkbook.Sheets(1).Cells(1, 2) = "Subject"
    ThisWorkbook.Sheets(1).Cells(1, 3) = "Date"
    ThisWorkbook.Sheets(1).Cells(1, 4) = "Size"
    ThisWorkbook.Sheets(1).Cells(1, 5) = "EmailID"
    'ThisWorkbook.Sheets(1).Cells(1, 6) = "Body"
    
    'Export eMail Data from PST Folder
    oRow = 1
    For iRow = 1 To Folder.Items.Count
        'If condition to import mails received in last 60 days
        'To import all emails, comment or remove this IF condition
        If VBA.DateValue(VBA.Now) - VBA.DateValue(Folder.Items.Item(iRow).ReceivedTime) <= 60 Then
           oRow = oRow + 1
           ThisWorkbook.Sheets(1).Cells(oRow, 1).Select
           ThisWorkbook.Sheets(1).Cells(oRow, 1) = Folder.Items.Item(iRow).SenderName
           ThisWorkbook.Sheets(1).Cells(oRow, 2) = Folder.Items.Item(iRow).Subject
           ThisWorkbook.Sheets(1).Cells(oRow, 3) = Folder.Items.Item(iRow).ReceivedTime
           ThisWorkbook.Sheets(1).Cells(oRow, 4) = Folder.Items.Item(iRow).Size
           ThisWorkbook.Sheets(1).Cells(oRow, 5) = Folder.Items.Item(iRow).SenderEmailAddress
           'ThisWorkbook.Sheets(1).Cells(oRow, 6) = Folder.Items.Item(iRow).Body
        End If
    Next iRow
    MsgBox "Outlook Mails Extracted to Excel"
    Set Folder = Nothing
    Set sFolders = Nothing
    
End_Lbl1:
End Sub
 
Laatst bewerkt:
Goedemorgen

Bedankt voor het snel aanleveren van de code.
Punt is dat ie bij vastloopt bij rood gearceerde regel:

'MailBoxName = "edmoor@telfort.nl"
MailBoxName = "Postvak IN"

'Mailbox Folder or PST Folder Name (As how it is displayed in your Outlook Session)
Pst_Folder_Name = "Postvak IN" 'Sample "Inbox" or "Sent Items"

'To directly a Folder at a high level
'Set Folder = Outlook.Session.Folders(MailBoxName).Folders(Pst_Folder_Name)

'To access a main folder or a subfolder (level-1)
For Each Folder In Outlook.Session.Folders(MailBoxName).Folders

Ik krijg de melding: De bewerking is mislukt. Kan een object niet vinden.

Ik had ook in variabele: MailBoxName mijn e-mailadres vervangen met die van jou maar dat werkte ook niet.
Ik heb ook gekeken in Outlook maar kon niet zien wat het evt was.
Is er geen code die door alle folders heen browsed waar je bovenstaande niet hoef op te geven?
Of zie jij wat ik fout doe?
Mijn hoofdfolder heeft "Postvak IN"
Ik heb ook in referenties aangegeven de outlook object library.
 
Dit is natuurlijk niet goed: MailBoxName = "Postvak IN"
Daar moet geen "Postvak IN" staan maar het email adres, zoals in het voorbeeld er boven waar mijn email adres staat. Die "Postvak IN" zet je dan in Pst_Folder_Name = "Postvak IN"
 
Laatst bewerkt:
Dat heb ik natuurlijk gedaan.
Ik heb diverse e-mailadressen geprobeerd aangezien ik meerdere e-mailadressen gebruik.
De default en anderen maar het loopt telkens vast op dezelfde regel.
Ik gebruik wel MS Excel 2003 en Microsoft Outlook 11.0 Object library zou het daaraan kunnen liggen dan?
Ik neem aan dat je dit ook in Excel 2003 kon doen dus dacht zelf dat het daaraan niet zou kunnen liggen.
 
Daar kan ik je helaas niet bij helpen. Ik heb geen Office 2003 hier dus kan dat niet testen. De code werkt goed in mijn Office 2013.
 
Laatst bewerkt:
Das jammer te horen.
In ieder geval bedankt voor het meedenken en als ik de oplossing vind dan laat ik het direct weten.
 
Beste edmoor

Ik heb online zitten zoeken maar kan niets echt iets vinden.
is er geen methode om generiek de mailboxname op te vragen en aan de hand van resultaat de ze inladen?
In jouw geval heeft jouw MailBoxName = "edmoor@telfort.nl"
Als ik de naam heb kan ik wellicht de code gebruiken.
 
Dat weet ik zo niet en kan het sowieso niet testen wegens het ontbreken van het 12 jaar oude Office 2003. Wellicht tijd om eens naar een hogere versie over te stappen?
 
Ik heb klanten die met 2003 en 2007 werken dus die vlieger gaat niet op.
 
Dan moet je wat inderdaad. Morgen heb ik wel Office 2003 tot m'n beschikking en zal dan eens kijken.
 
Tja nee verkopen aan klanten is ook geen optie.
Ik heb een minder fraaie oplossing gevonden in Outlook zelf waar ik ook handmatig eea moet selecteren, o.a. welke folder via een dialogbox.
Het werkt wel maar als jij morgen een vba oplossing kan bouwen maak je me heel gelukkig.
 
Ik zal zien of ik er tijd voor krijg. Overigens heb ik daar geen actieve Outlook 2003, alleen Excel.
 
laten we hopen van wel en ik zie je reactie wel binnenkomen als je tijd hebt
 
De code die je zoekt kun je m.i. beter vanuit Outlook aftrappen; je kunt dan makkelijker bij je Outlook objecten en het openen van een Excel sessie is een stuk simpeler. Helen Feddema heeft een voorbeeld dat je bijna letterlijk kunt overnemen. Het gaat om Code 47.
 
Ziet er goed uit en is voor Office 2003 gemaakt, dus dat zal daar zeker werken :)
 
Ja dat is die ik ook gevonden had waar je handmatig de folder moet selecteren.
Zag gisteren dat ie op een gegeven moment vast liep en ik moest dit nog debugen maar ga kijken of zij hier wel een antwoord voor had geschreven.
Zo niet dan los ik eerst de mijne op en dan publiceer ik deze wel.
 
Heren,

De code die Helen Feddema heeft gepubliceerd werkt en die kan je het beste gebruiken.
Had er zelf een MS Access database aangehangen aangezien excel een max heeft van 64.000 rijen maar je zou het ook in .csv formaat kunnen aanmaken.
In ieder geval veel dank voor jullie hulp en inzet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan