• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

E-mails vanuit Outlook wegschrijven naar Excel bestandje

Status
Niet open voor verdere reacties.

danny147

Terugkerende gebruiker
Lid geworden
29 apr 2007
Berichten
4.744
Beste, ;)

Graag zou ik mijn e-mails (Outlook) in een Excel bestandje willen zien.

Heb een code gekregen van Daniël maar wil deze niet testen omdat er een regel in staat die het geheugen wist.

Kan iemand deze aanpassen, of heeft iemand zo een code ??

Code:
Sub GetAttachments() 
' Deze Outlook macro controleert de Outlook Inbox op attachements van elk type 

' Attentie: Maak eerst een map "Email Attachements" in de hoofdmap 
' of wijzig het path in deze code. 
' Begin van de macro 
    On Error GoTo GetAttachments_err 
' Declaratie van de variabelen 
    Dim ns As NameSpace 
    Dim Inbox As MAPIFolder 
    Dim Item As Object 
    Dim Atmt As Attachment 
    Dim FileName As String 
    Dim i As Integer 
    Set ns = GetNamespace("MAPI") 
    Set Inbox = ns.GetDefaultFolder(olFolderInbox) 
    i = 0 
' Controleer de Inbox op boodschappen en exit wanneer niets gevonden wordt 
    If Inbox.Items.Count = 0 Then 
        MsgBox "Er staan geen boodschappen in de Inbox.", vbInformation, _ 
               "Niets gevonden" 
        Exit Sub 
    End If 
' Controleer de boodschappen op attachments 
    For Each Item In Inbox.Items 
' Sla de gevonden attachments op 
        For Each Atmt In Item.Attachments 
        ' Dit path moet bestaan! Wijzig indien nodig de map naam. 
            FileName = "C:\Email Attachments\" & Atmt.FileName 
            Atmt.SaveAsFile FileName 
            i = i + 1 
         Next Atmt 
    Next Item 
' Toon een boodschappen venster 
    If i > 0 Then 
        MsgBox "Ik vond " & i & " attached bestanden." _ 
        & vbCrLf & "Ik heb ze opgeslagen in C:\Email Attachments map." _ 
        & vbCrLf & vbCrLf & "Veel plezier ermee.", vbInformation, "Gereed!" 
    Else 
        MsgBox "Ik vond geen attached bestanden in je mail.", vbInformation, "Gereed!" 
    End If 
' Wis het geheugen 
GetAttachments_exit: 
    Set Atmt = Nothing 
    Set Item = Nothing 
    Set ns = Nothing 
    Exit Sub 
' Zorg voor de fouten 
GetAttachments_err: 
    MsgBox "Er is een onverwachte fout opgetreden." _ 
          & vbCrLf & "Error Description: " & Err.Description _ 
        , vbCritical, "Error!" 
    Resume GetAttachments_exit 
End Sub 

Sub SaveAttachmentsToFolder() 
' Deze macro controleerd de subfolders in de inbox 

    On Error GoTo SaveAttachmentsToFolder_err 
' Declaratie van de variabelen 
    Dim ns As NameSpace 
    Dim Inbox As MAPIFolder 
    Dim SubFolder As MAPIFolder 
    Dim Item As Object 
    Dim Atmt As Attachment 
    Dim FileName As String 
    Dim i As Integer 
    Dim varResponse As VbMsgBoxResult 
    Set ns = GetNamespace("MAPI") 
    Set Inbox = ns.GetDefaultFolder(olFolderInbox) 
    Set SubFolder = Inbox.Folders("Sales Reports") ' Enter correct subfolder name. 
    i = 0 
' Controleer de subfolder op boodschappen of anders exit. 
    If SubFolder.Items.Count = 0 Then 
        MsgBox "Er zijn geen boodschappen.", vbInformation, _ 
               "Niets gevonden" 
        Exit Sub 
    End If 
' Controleer alle boodschappen op attachments 
    For Each Item In SubFolder.Items 
        For Each Atmt In Item.Attachments 
' Controleer de bestandsnaam van elk attachment en sla deze op als het een "xls" extensie heeft 
            If Right(Atmt.FileName, 3) = "xls" Then 
            ' Dit path moet bestaan! verander de map naam wanneer dat nodig is. 
                FileName = "C:\Email Attachments\" & _ 
                    Format(Item.CreationTime, "yyyymmdd_hhnnss_") & Atmt.FileName 
                Atmt.SaveAsFile FileName 
                i = i + 1 
            End If 
        Next Atmt 
    Next Item 
' Toon een overzicht 
    If i > 0 Then 
        varResponse = MsgBox("Ik vond " & i & " attached bestanden." _ 
        & vbCrLf & "Ik heb ze opgeslagen in de map C:\Email Attachments folder." _ 
        & vbCrLf & vbCrLf & "Wilt u deze bestanden nu bekijken?" _ 
        , vbQuestion + vbYesNo, "Gereed!") 
' Open Windows Explorer om de bestanden te tonen als de gebruiker dat wenst 
        If varResponse = vbYes Then 
            Shell "Explorer.exe /e,C:\Email Attachments", vbNormalFocus 
        End If 
    Else 
        MsgBox "Ik vond geen gekoppelde attached bestanden in uw mail.", vbInformation, "Gereed!" 
    End If 
' Maak het geheugen leeg 
SaveAttachmentsToFolder_exit: 
    Set Atmt = Nothing 
    Set Item = Nothing 
    Set ns = Nothing 
    Exit Sub 
' Handel de fouten af 
SaveAttachmentsToFolder_err: 
    MsgBox "Een onverwachte fout is opgetreden'" _ 
        
        & vbCrLf & "Fout nummer: " & Err.Number _ 
        & vbCrLf & "Fout omschrijving: " & Err.Description _ 
        , vbCritical, "Fout!" 
    Resume SaveAttachmentsToFolder_exit 
End Sub

Groetjes Danny. :thumb:
 
Danny,

Dat klopt en hoort ook.

Als je in het begin van je code een Set commando gebruikt wordt er data in je geheugen geladen.

Door het commando Set x= Nothing te gebruiken maar je dat stukje geheugen weer leeg wat eerder in gebruik is genomen door Set.

Deze code kun je dus ongestraft gebruiken.
 
Beste Superzeeuw ;)

He de code laten lopen, maar geeft een foutmekding bij deze regel:

Code:
Dim ns As Namespace

Foutmelding:

Code:
Een door de gebruiker gedifinieerd  gegevenstype is niet gedefinieerd.

Groetjes Danny. :thumb:
 
Danny , heb je in de VBE bij Extra de verwijzing naar Microsoft Outlook .. object library aangevinkt . Het haalt enkel de bijlagen uit de mails niet de mail zelf :confused:
 
Beste Daniël ;)

Danny , heb je in de VBE bij Extra de verwijzing naar Microsoft Outlook .. object library aangevinkt . Het haalt enkel de bijlagen uit de mails niet de mail zelf :confused:

Deze staat aan, maar nog steeds hetzelfde probleem.

PS; Welke items staan er allemaal aan in de verwijzing ?

Groetjes Danny. :thumb:
 
Beste Daniël, ;)

Zover zijn we al geraakt, maar het is niet hetgeen we bedoelen hé ?

Het zou de mails moeten lezen en in excel zetten en dat doet hij niet.

Is er nog iemand die hier kennis van heeft, misschien warme bakkertje, cow18, rdg, wigi, roncancio, ginger of vele andere

Groetjes Danny. :thumb:
 
Beste Daniël, ;)

Zover zijn we al geraakt, maar het is niet hetgeen we bedoelen hé ?

Beste Danny , ik weet het dat hij enkel de bijlagen leest ( opslaat ) voor het lezen van de mails die in outlook toekomen heb ik nog geen code werkende gekregen .

Misschien dat iemand deze code kan verbeteren aanpassen aan je vraag .
 

Bijlagen

Laatst bewerkt:
Danny,

Nog geen 5 minuten zoeken op inet en dit gevonden:
Link

Code:
Sub ListAllItemsInInbox()
Dim OLF As Outlook.MAPIFolder, CurrUser As String
Dim EmailItemCount As Integer, i As Integer, EmailCount As Integer
    Application.ScreenUpdating = False
    Workbooks.Add ' create a new workbook
    ' add headings
    Cells(1, 1).Formula = "Subject"
    Cells(1, 2).Formula = "Recieved"
    Cells(1, 3).Formula = "Attachments"
    Cells(1, 4).Formula = "Read"
    With Range("A1:D1").Font
        .Bold = True
        .Size = 14
    End With
    Application.Calculation = xlCalculationManual
    Set OLF = GetObject("", _
        "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    EmailItemCount = OLF.Items.Count
    i = 0: EmailCount = 0
    ' read e-mail information
    While i < EmailItemCount
        i = i + 1
        If i Mod 50 = 0 Then Application.StatusBar = "Reading e-mail messages " & _
            Format(i / EmailItemCount, "0%") & "..."
        With OLF.Items(i)
            EmailCount = EmailCount + 1
            Cells(EmailCount + 1, 1).Formula = .Subject
            Cells(EmailCount + 1, 2).Formula = Format(.ReceivedTime, "dd.mm.yyyy hh:mm")
            Cells(EmailCount + 1, 3).Formula = .Attachments.Count
            Cells(EmailCount + 1, 4).Formula = Not .UnRead
        End With
    Wend
    Application.Calculation = xlCalculationAutomatic
    Set OLF = Nothing
    Columns("A:D").AutoFit
    Range("A2").Select
    ActiveWindow.FreezePanes = True
    ActiveWorkbook.Saved = True
    Application.StatusBar = False
End Sub
 
Beste superzeeuw ,
Deze code heb ik donderdagavond al aan Danny gemaild ;)

Danny wil zijn body tekst van een email lezen in Excel . Met het laatste voorbeeldje dat ik poste lukt dit bij mij al , maar ik moet telkens op " call " en " geen datum gevonden " drukken per mail dat in mijn outlook map staat . Ook komt de tekst niet aaneengesloten in Excel terecht . zie jpg code laten lopen en de mails staan in Excel maar :o
 

Bijlagen

  • vb mails in Excel.jpg
    vb mails in Excel.jpg
    56,4 KB · Weergaven: 64
ik heb de regel
Code:
Cells(EmailCount + 1, 5).Formula = .Body
Cells(EmailCount + 1, 6).Formula = .SenderName
toegevoegd en krijg dan het bericht in 1 cel
krijg wel het bericht "een programma probeert toegang...."
deze bevestig ik voor een minuut

gr wim
 
Laatst bewerkt:
Beste, ;)

Heb de code wat aangepast met de extra informatie van wiki, Daniël en superzeeuw en ben geholpen met deze code.

Code:
Sub ListAllItemsInInbox()
Dim OLF As Outlook.MAPIFolder, CurrUser As String
Dim EmailItemCount As Integer, i As Integer, EmailCount As Integer
    Application.ScreenUpdating = False
    Workbooks.Add ' create a new workbook
    ' add headings
    Cells(1, 1).Formula = "Onderwerp"
    Cells(1, 2).Formula = "Van"
    Cells(1, 3).Formula = "Datum van verzenden"
    Cells(1, 4).Formula = "Bericht"
    Cells(1, 5).Formula = "Bijlagen"
    Cells(1, 6).Formula = "Gelezen"
    With Range("A1:F1").Font
        .Bold = True
        .Size = 16
    End With
    Application.Calculation = xlCalculationManual
    Set OLF = GetObject("", _
        "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    EmailItemCount = OLF.Items.Count
    i = 0: EmailCount = 0
    ' read e-mail information
    While i < EmailItemCount
        i = i + 1
        If i Mod 50 = 0 Then Application.StatusBar = "Reading e-mail messages " & _
            Format(i / EmailItemCount, "0%") & "..."
        With OLF.Items(i)
            EmailCount = EmailCount + 1
            Cells(EmailCount + 1, 1).Formula = .Subject 'onderwerp
            Cells(EmailCount + 1, 2).Formula = .SenderName 'van
            Cells(EmailCount + 1, 3).Formula = Format(.ReceivedTime, "dd.mm.yyyy hh:mm") 'datum van verzenden
            Cells(EmailCount + 1, 4).Formula = .Body 'het bericht
            Cells(EmailCount + 1, 5).Formula = .Attachments.Count 'bijlagen
            Cells(EmailCount + 1, 6).Formula = Not .UnRead 'gelezen
 
            
        End With
    Wend
    Application.Calculation = xlCalculationAutomatic
    Set OLF = Nothing
    Columns("A:A").ColumnWidth = 15
    Columns("B:B").ColumnWidth = 20
    Columns("C:C").ColumnWidth = 15
    Columns("D:D").ColumnWidth = 100
    Columns("E:E").ColumnWidth = 12
    Columns("F:F").ColumnWidth = 12
    Rows("1:100").AutoFit
    Range("A2").Select
    ActiveWindow.FreezePanes = True
    ActiveWorkbook.Saved = True
    Application.StatusBar = False
End Sub

Er zitten wat nadelen aan, maar deze zal ik er moeten bijnemen, zaols:

Al de namen naar wie het verstuurd wordt
Als het een RE. is staat alles ervoor er ook op
De antiviruscontrole

Als er nog iemand een aanrader heeft hhor ik het graag.
Voorlopig zet ik deze op opgelost.

Groetjes Danny. :thumb:
 
ik heb de regel
Code:
Cells(EmailCount + 1, 5).Formula = .Body
Cells(EmailCount + 1, 6).Formula = .SenderName
toegevoegd en krijg dan het bericht in 1 cel
Wim dit is al een heel stuk verder " .body" :thumb:
Oeps Danny ik was aan het testen toen jij je quote poste :p
 
Laatst bewerkt:
Danny,

Jouw wensen zijn moeilijk op te lossen.
Als je email berichten er altijd hetzelfde uit zouden zien dan kun je daar een macro voor schrijven die alles opruimt maar dat is niet zo.

Iedere mail is anders en dat is afhankelijk van wie de mail afkomstig is.
Als er mailtjes zijn die van een bepaald adres afkomen en altijd dezelfde layout hebben dan kun je hier iets aan doen maar dat wordt dan wel een enorme klus.

Ik denk dat je het hiermee moet doen.
 
Beste Superzeeuw ;)

Bedankt voor het meedenken.

groetjes Danny. :thumb:
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan