Datum van onvangst e-mai + delen van e-mailbody exporteren naar Excel

Status
Niet open voor verdere reacties.

king85nl2

Gebruiker
Lid geworden
26 okt 2018
Berichten
5
Ik ben relatief nieuw met VBA code en probeer een code te maken, waarbij ik graag in Microsoft Outlook...
  • de datum waarop ik een e-mail heb ontvangen
  • tekstdelen van die e-mail (die afkomstig zijn vanuit een online formulier)
...in hetzelfde Excel bestand wil opslaan.

Het is mij inmiddels gelukt om delen van de tekstvelden als strings naar mijn Excel-bestand te kopiëren (tabblad 2 van het Excel-bestand). Dit deel werkt dus, met per geselecteerde e-mail een nieuwe regel.
Ik krijg het echter niet voor elkaar om ook de datum waarop de e-mail ontvangen is (notatie als: 26-10-18) in het excel bestand op te laten nemen (in cel/kolom F van van elke nieuwe regel).

Het zou de bedoeling zijn om een online aanmeldformulier, wat ik als e-mail ontvangen heb, te laten 'scannen' door de Macro en delen van de inhoud te plaatsen naar het ecxel bestand.

Welke code dien ik op welke locatie in te voegen? Ik heb al iets gevonden met Dim olItem As Outlook.MailItem, maar verder kom ik niet.

Hieronder mijn reeds bestaande code:
Code:
Sub CopyToExNL()
Dim xlApp As Object
Dim xlWB As Object
Dim xlSheet As Object
Dim olItem As Outlook.MailItem
Dim vText As Variant
Dim sText As String
Dim vItem As Variant
Dim i As Long
Dim rCount As Long
Dim bXStarted As Boolean
Const strPath As String = "BESTANDSPAD VAN EXCEL BESTAND HIER" 'the path of the workbook

If Application.ActiveExplorer.Selection.Count = 0 Then
    MsgBox "No Items selected!", vbCritical, "Error"
    Exit Sub
End If
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
    Application.StatusBar = "Please wait while Excel source is opened ... "
    Set xlApp = CreateObject("Excel.Application")
    bXStarted = True
End If
On Error GoTo 0
'Open the workbook to input the data
Set xlWB = xlApp.Workbooks.Open(strPath)
Set xlSheet = xlWB.Sheets("Blad2")

'Process each selected record
 rCount = xlSheet.UsedRange.Rows.Count
  For Each olItem In Application.ActiveExplorer.Selection
    sText = olItem.Body
    vText = Split(sText, Chr(13))
    'Find the next empty line of the worksheet
     rCount = rCount + 1
    'Check each line of text in the message body
    For i = UBound(vText) To 0 Step -1
      If InStr(1, vText(i), "Voornaam: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("B" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "Achternaam: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("D" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "Opdrachtgever(s) / bedrijfsnaam: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("E" & rCount) = Trim(vItem(1))
        End If
        
        If InStr(1, vText(i), "Telefoonnummer: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("G" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "E-mail: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("H" & rCount) = Trim(vItem(1))
        End If

        If InStr(1, vText(i), "Functie: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("J" & rCount) = Trim(vItem(1))
        End If
        
        If InStr(1, vText(i), "Parkeerkaart: ") > 0 Then
            vItem = Split(vText(i), Chr(58))
            xlSheet.Range("K" & rCount) = Trim(vItem(1))
        End If


    Next i
    xlWB.Save
Next olItem
xlWB.Close SaveChanges:=True
If bXStarted Then
    xlApp.Quit
End If
Set xlApp = Nothing
Set xlWB = Nothing
Set xlSheet = Nothing
Set olItem = Nothing
End Sub
 
Daarom noemde ik olItem ;)
Je hebt deze regel staan:
sText = olItem.Body

Zet daar direct onder:
sDate = olItem.ReceivedTime
 
Ik kom na het plakken van de code van edmoor (dank!) dan waarschijnlijk uit op de volgende regel:
Code:
xlSheet.Range("F" & rCount) = Format(olItem.ReceivedTime, "dd/MM/yy") 'Date

Waarbij ik dus de datum van de e-mail in kolom F op de rij zou willen hebben (met de notatie als 30-10-18).
Waar moet ik deze code plakken? Wat zijn namelijk mijn IF, THEN criteria?

Als ik de code puur tussen E en G plak, krijg ik bij het runnen van de marco de melding: compileerfout - variabele niet gedefineerd (en wordt in het script de sDate geselecteerd).
 
De foutmelding zal komen omdat je sDate niet hebt gedeclareerd en Option Explicit gebruikt.
Als je de regel van #7 gebruikt heb je die variable sDate uiteraard niet nodig en kan je die regel met sDate gewoon weg laten.
 
Bedankt voor de toelichting bij #8. De code bij #7 lijkt inderdaad te werken. Er komt een datum van de e-mil in kolom F van de Excel.
Enige probleem nu is dat de datum een verkeerde notatie heeft (vanuit outlook naar excel worden maand en dag door elkaar gehaald: een e-mail van 3 oktober wordt omgezet naar 10-3-2018 en Excel leest dit als 10 maart). Ook het jaartal (2018) wordt voluit geschreven, terwijl ik hoopte op xx-xx-18
Hoe kan ik zorgen voor de juiste notatie? Is mijn definitie bij Format van Date niet correct of dien ik juist nog ergens een stukje code te plakken voor de juiste notatie?
 
Als de betreffende cel al een datum format heeft hoef je de Format functie niet te gebruiken en is dit dus voldoende:
xlSheet.Range("F" & rCount) = olItem.ReceivedTime
 
Laatst bewerkt:
Bedankt! Na het weghalen van de Format komt de datum inderdaad correct in beeld. Ik kan weer verder! Nogmaals dank voor alle hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan