• 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.

Verschillende data in 1 cel automatisch omzetten in kolommen.

Status
Niet open voor verdere reacties.
Nou, wat ik eigenlijk wil is wanner ik een email krijg. Dat ik die ritopdrachten vanuit Outlook exporteer naar Excel. Daar sorteer en de tekst naar kolommen zet. En dan komt de data per dag in een aparte sheet. Dat noemen we een rittenstaat. Deze kan ik anders ook nog wel opsturen?
Dus dat ik minder hoef in te vullen. Nu ben ik daar heel lang mee bezig en word mijn vrouw weer boos.(haha)
 
Outlook er bij betrekken kan ik niet, want Outlook staat niet op mijn computer. En wat maken zonder dat ik het kan controleren, is niet wenselijk. Dus ik moet uitgaan van de gegevens zoals jij ze van Outlook naar Excel hebt gekopieerd. Ik denk dat het moeilijk wordt als niet alle regels dezelfde veldnamen bevatten. Ik vroeg je waar "Naam" staat in de gegevens. Waar die veldnamen staan, moet wel bekend zijn hoor, anders heeft het geen zin eraan te beginnen. Maar misschien hebben deskundiger mensen op dit forum betere ideeën dan ik.Voor mij wordt het trouwens sowieso volgende week, want dit weekend kan ik er niet aan werken.
 
Op je vraag waar de naam staat: ik bemerk nu pas dat Outlook niet alles exporteert! Hij breekt het af. De klantnaam die staat ook in de mail maar komt dan niet in Excel te staan.
Je helpt me al veel hoor, dank je wel.
 
Ik merk nu dat de export naar Access beter gaat. Dan blijft de email hoofdtekst behouden. Ik heb nu Outlook geexporteerd naar Access en daarna de gegevens vanuit Access geimporteerd in Excel. Dan zie ik de veldnamen er wel opstaan.
Hieronder staat de originele mail.

Uw ritopdracht
Ritnummer 324196
Datum 10-12-2011
Bestelde tijd 17:15
Van Prinsengracht[Amsterdam] 321
via Bekkenstraat[Eemnes] 102 - - - - - - - - - -
Naar Prinsengracht[Amsterdam] 321
Meldtijd
Wagen 932 - Inhuur Taxi
Kontakt wendy

Vluchtnummer KL1002
Vlucht Schematijd 17:15
Klant Jopie Popie
Passagier(s) Dhr. K. Plop
Aantal Passagiers 1
Opmerkingen Af huis >> w 22.00 >> retour huis / met auto van meneer
Tarief of eigen bijdrage 0,00

Ik heb als veldnamen nodig:

Datum, Klant(naam), Passagier, Tijd, Van, via, Naar
 

Bijlagen

Als je je bestand plaats als Excel97-2003-bestand,
dan kan het ook op mijn computer geopend worden.
 
Een Excelbestand met slechts 2 rijen is wel heel erg weinig om een code op te baseren, vooral als de gegevens erin niet aan elkaar gelijk zijn. Uit die twee regels alleen blijkt bv.al dat in regel 2 "Passagier" niet voorkomt en "Via" ook niet. En misschien kan "Via" ook wel meerdere adressen beslaan. Dat zijn nog maar 3 verschillen in twee rijen. Als je 50 rijen laat zien, dan zitten daar misschien ook wel 50 verschillen in. Daar is allemaal rekening mee te houden hoor, maar dan moeten AL die mogelijke verschillen vooraf bekend zijn. En dan de code schrijven kost mij (maar wellicht andere lezers op dit forum niet) tijd, ontzettend veel tijd.
 
Probeer deze 'ns uit op je voorbeeld. Maak cel B2 je geselecteerde cel (en zo verder, maar doe het even voor de test per cel) en laat de code lopen.
Code:
Sub SplitsCel()
Dim q3(1 To 7) As Variant

    q1 = Split(ActiveCell.Value, Chr(10))
    q2 = Array("Datum", "Bestelde tijd", "Van", "via", "Naar", "Klant", "Passagier(s)")
    
    For i = 0 To UBound(q1)
        On Error Resume Next
        q3(WorksheetFunction.Match(q1(i), q2, 0)) = q1(i + 2)
        On Error GoTo 0
    Next i
    
    ActiveCell.Offset(, 1).Resize(, 7) = q3
    
End Sub
Deze code zoekt in de waarde van cel Bn naar de jou opgegeven headers en plaatst deze in een array om uiteindelijk weg te schrijven naar de sheet.
Het maakt dus niet meer uit hoeveel headers er zijn.

Groet, Leo

[EDIT] Ik zie dat de datum nog omgedraaid wordt weergegeven, maar dat komt wel goed als de eerste opzet voor akkoord is.
 
Laatst bewerkt:
Wauw! Dit gaat al een stuk beter! Goed hoor. Dank je wel. Maar deze code geld alleen voor B2. Misschien een stomme vraag: Hoe kan ik het voor alle cellen laten gelden?
Ik kan ze alleen één voor eén selecteren? Klopt dat?
 
Laatst bewerkt:
digitall12, Dat codeblokje heb ik geschreven aan de hand van je voorbeeldbijlage. Als jij kan aangeven hoe nou elk mailtje er uit ziet, kan daar iets op geschreven worden. Ik hoop overigens wel dat er dus slechts 1 opmaak is, anders heb je echt een probleem! Dus het aantal velden mag verschillen, maar de opmaak én alle veldnaamomschrijvingen moeten wel altijd gelijk zijn.
Is dus je bijlage in post nr.30 de opmaak zoals die standaard wordt gehanteerd?

Groet, Leo
 
Hierbij een oplossing voor de 5 rijen met gegevens die je via 2 bestanden postte.
De opmaak van het eerste bestand week nogal wat af van die in het tweede.
Toch is er met kunst- en vliegwerk met een aantal verschillen rekening gehouden.
Maar als in een andere uitdraai de gegevens nóg weer anders staan, dan zul je fouten krijgen.
Degene waarvan je de e-mails met gegevens krijgt, vult waarschijnlijk steeds eenzelfde formulier in. Als die nu eens niets aan de veldnamen zou wijzigen, dan zou een oplossing veel eenvoudiger zijn (zie ook de opmerking van Ginger). Open de bijlage, ga naar blad2 en toets Ctrl-q .
 
Leo, om eerst op jouw vraag terug te komen: de bijlage in post#30 is dan het juiste. Helaas is dat op een omslachtige manier van export en importeren, want vanuit Outlook exporteer ik het naar Access. En dan weer naar Excel. Reden is omdat de export vanaf Outlook naar Excel niet volledig is. Excel breekt tekst af.

En zaptr: Toppie. Deze heb ik uitgeprobeerd en het werkt! Prachtig.


Maar nu wil ik als laatste (waar het uiteindelijk om gaat:D) dat de gegevens die ik nodig heb voor die ene datum automatisch in het juiste veld word gezet.
Ik heb hierbij mijn rittenstaat bijgevoegd. Helaas alleen in xlsm, omdat het bestand voor 97/2003 te groot is.

Nu is mijn vraag:

Ik krijg voor een dag een aantal ritten, deze wil ik automatisch laten invullen( Opdrachtgever=klant, Functionaris=passagier, Bestelde locatie=van, Bestemming=naar,
en Besteltijd=tijd...

Nu heb ik in mijn voorbeeld 6 ritten voor meneer Molen. Nu kan ik maar 4 ritten kwijt op een rittenstaat. Als ik het met de hand invul dan sla ik het eerste deel op als 24102011 en de rest als 24102011(2).

Is het misschien de mogelijkheid om de sheet automatisch te vullen met bovenstaande gegevens, te saven op datum(24112011) en de rest opvolgend eindigend met (2) of (3)?
Ik moet ze toch openen om de rest in te vullen (km stand en eindtijd etc.)

Mocht dit niet lukken: ik ben jullie al zeer erkentelijk dat ik nu al zo ver ben!:D:D
 

Bijlagen

In post #6 schrijf je

Code:
Ik exporteer mijn email naar Excel. Ik krijg mijn ritopdracht ongesorteerd in beeld.

Probeer de brongegevens op een uniforme manier aangeleverd te krijgen.

Daar voorkom je veel problemen mee.

Kunnen de gegevens niet (b.v. via Excel) aangeleverd worden?

Of kunnen de ritadministraties niet uit b.v. de black box van de auto worden geimporteerd naar Excel?

Heb je hier vragen of opmerkingen over, laat het gewoon even weten.
 
Oeldere, ik krijg de mail zo aangeleverd. Dit kan niet anders. En ik heb tot nog toe geen blackbox. Zal wel in de toekomst komen, maar wanneer weten we niet.
Ik ben nu al heel erg ver dankzij de steun van dit forum. Nu alleen nog mijn laatste probleem oplossen en dan ben ik dik tevreden.
 
Zapatr,

Ik ben heel blij met je oplossing alleen zit er een fout in de celeigenschappen.
De datum staat ingesteld op Chinees(Taiwan) en ik krijg dit niet goed. Wanneer ik het verander en de macro start dan staat de datum weer verkeerd. Hoe verander ik dit?
 
Bij mij ontstaat er geen fout, dat had ik voor het posten van mijn bestand gecontroleerd.
Ik heb in vba juist een datumopmaak toegevoegd om geen fout te laten ontstaan.
Ik weet niet of het verschil tussen Excel 2002/2003 - Excel 2007/2010 hiermee te maken heeft, ik denk van niet. Staan bij jou de celeigenschappen waarin via vba een datum wordt geplaatst, wel ingesteld als "Standaard"?
 
digitall12,
ik weet niet waar in jouw bestand het probleem met datums zich voordoet, maar het is wel zo dat vba geen Nederlandstalige benamingen kent voor weekdagen en maanden. Als je die in vba wil gebruiken, dan moet je die daar eerst specificeren en aangeven welke dag/maand de eerte, tweede, enz. is.
Het overbrengen van je gegevens naar een formulier waarover je in je bericht van december spreekt, kan eigenlijk niet zo moeilijk zijn, want het komt neer op het kopiëren van gegevens van het ene naar het andere blad. Maar aangezien ik in Excel 2002 niet kan zien hoe je blad met het formulier eruit ziet.... (het compatibiliteitspakket werkt niet meer op mijn computer na installatie van een ander spreadsheetprogramma).
 
Laatst bewerkt:
Hoi Zapatr,

Ik weet waarom het niet goed is alleen ik weet niet wat ik er aan kan doen. Het ligt absoluut niet aan jou, maar ik heb een vba regel gevonden die de boel misschien in de war schopt.

Deze is het:

Code:
Public Sub CopySheetFromOtherWorkbook()
    Dim vFilename
    Dim SourceBook As Workbook
    Dim TargetBook As Workbook
    Dim sSheet1 As String
    Dim sSheet2 As String
    
    'geef aan wat het originele werkboek is
    '(het werkboek waarin we gaan werken)
    Set TargetBook = Application.ActiveWorkbook
    
    'kijk of het standaard werkboek bestaat
    If FileExists("D:\EmailAccess.xlsx") Then
        'het standaardbestand bestaat dus open die
        vFilename = "D:\EmailAccess.xlsx"
    Else
        'het standaardbestand bestaat niet, dus vraag de gebruiker
        'om een bestand te selecteren
        vFilename = Application.GetOpenFilename("Excel bestanden (*.xlsm), *.xlsm", Title:="Select a file")
    End If
    
    'kijk of er een bestand is geselecteerd
    If vFilename <> False Then
        'een bestand is geselecteerd dus open die
        Set SourceBook = Workbooks.Open(vFilename)
        
        'kopieer sheet "Email" van het geopende werkboek
        SourceBook.Sheets("Email").Select
        'plak de gekopieerde sheet achter de eerste sheet v/h originele werkboek
        SourceBook.Sheets("Email").Move After:=TargetBook.Sheets(4)
        
        'geef melding dat de sheet is gekopieerd
        sSheet1 = "Email"
        sSheet2 = TargetBook.Sheets(4).Name
        MsgBox "Sheet " & sSheet1 & " is gekopieerd in werkboek " & TargetBook.Name & " achter sheet " & sSheet2, _
               vbInformation + vbOKOnly, _
               "Sheet gekopieerd!"
                       
        'geef de nieuwe sheet in het originele werkboek de focus
        TargetBook.Sheets("Email").Select
    End If
    
End Sub

Code:
Private Function FileExists(fname) As Boolean
'Geeft TRUE terug als een bestand bestaat
    Dim x As String
    
    x = Dir(fname)
    FileExists = IIf(x <> "", True, False)
    
End Function
Deze werkt als een trein alleen krijg ik nu bij celeigenschappen de Chinese ipv Nederlands.

Misschien doe ik het wel allemaal té omslachtig? Maar omdat Excel mijn emailbericht afbreekt, móet ik wel Outlook exporteren naar Access. En vandaar uit exporteren naar Excel. Dat bestand heet dan EmailAccess. Vandaar uit gebruik ik deze code.
 
Laatst bewerkt door een moderator:
Het lijkt mij niet dat door bovenstaande code de celeigenschappen naar het Chinees kunnen veranderen.
Zou het kunnen dat bij "Celeigenschappen - Datums - Locatie" per ongeluk een keer Chinees is gekozen i.p.v. Nederlands? Als je bij "Celeigenschappen - Datums" de locatie instelt als "Nederlands (standaard)", blijft die instelling dan niet staan?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan