Excel macro vraag met CSV met kolommen opmaak

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • joostman
  • Registratie: Oktober 2003
  • Laatst online: 02-05 07:29
Mijn vraag
Elke dag krijg ik een XLSX bestand wat ik om moet zetten en opslaan als een CSV bestand.
De reden voor CSV is dat dit bestand weer wordt opgepakt door een tweede applicatie die de gegevens uitleest.
Als ik de handelingen handmatig doe gaat het proces goed:
- Open de XLSX
- Opslaan als csv (gescheiden door lijstscheidingsteken)
- Een aantal vragen over compatibiliteit beantwoorden en of ik het zeker weet.
Dit levert een CSV bestand op, maar onderwater geeft Excel er metadata aan mee, want als ik dit bestand open (de csv) dan stopt hij automatisch de komma gescheiden velden in kolommen. Wat nu blijkt is dat de inlezende applicatie precies ook kijkt naar kolommen, waardoor het proces goed gaat.

Wil ik dit automatiseren met een VBA macro, dan record ik bovenstaande acties en sla de macro op.
Draai ik bij een nieuw bestand de macro af, dan krijg ik een CSV bestand als output, maar wordt de metadata van de kolommen niet meegegeven. Op zich werkt het precies zoals het moet werken, maar ik heb de kolommen nodig.

Nu dacht ik, dan plak ik achter deze macro nog een deel waarbij ik de CSV weer uitlees (laad) en vervolgens de kolom A volgens tekst naar kolommen zijn werk laad doen en als laatste weer opsla.
Ook hierbij doet het zijn werk zoals eigenlijk verwacht en wordt het als CSV opgeslagen... zonder kolommen.

Ik snap niet goed wat het verschil is tussen de handmatige actie en de acties via de VBA macro, want Excel wordt echt geopend, de XLSX wordt geladen en opgeslagen als CSV. Is er iets wat ik mee kan geven in mijn macro om toch mijn kolommen te krijgen in een CSV bestand?

Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...

Beste antwoord (via joostman op 30-07-2020 17:06)


  • coop
  • Registratie: Augustus 2005
  • Laatst online: 19:29
@joostman het lijkt te werken als je de volgende code gebruikt (uiteraard aanpassen naar eigen locatie en bestandsnaam.
code:
1
ActiveWorkbook.SaveAs Filename:="data.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True


Met Local:=True, geef je mee dat hij de lokale settings van de gebruiker moet nemen ipv standaard settings.

Alle reacties


Acties:
  • 0 Henk 'm!

  • coop
  • Registratie: Augustus 2005
  • Laatst online: 19:29
Excel slaat CSV-bestanden niet op met metadata. Als je vanuit Excel zelf opslaat als CSV, dan gebruikt deze de regionale instellingen van Windows, dat is waarschijnlijk dat een lijst wordt gescheiden door ';'. Als je via VBA een CSV opslaat, dan gebruikt deze de Engelse instellingen met een ',' scheiding.
Bij het openen leest Excel automatisch lijsten met het verwachte scheidingsteken in als kolommen. Data gescheiden doormiddel van andere tekens wordt als blok ingelezen.

Om deze verwachting te checken, doe eens rechtermuis klik-> edit/aanpassen op de CSV die je zelf exporteert en op die door VBA geëxporteert is. Je zou in de eerste de kolommen gescheiden zien dmv ';' en de tweede dmv ','.

Als dit de situatie is zou je kunnen kijken of de applicatie die het CSV bestand moet inlezen ook ingesteld kan worden om ',' te lezen.

Acties:
  • 0 Henk 'm!

  • joostman
  • Registratie: Oktober 2003
  • Laatst online: 02-05 07:29
Dat is het!

Het scheidingsteken is inderdaad als het via Excel wordt opgeslagen een puntkomma en via de macro een komma!

Nu nog even speuren of ik via de macro ook mee kan geven dat het scheidingsteken geen Engelse komma moet zijn, maar een puntkomma.

Acties:
  • +1 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 20:29

g0tanks

Moderator CSA
joostman schreef op woensdag 29 juli 2020 @ 12:18:
Dat is het!

Het scheidingsteken is inderdaad als het via Excel wordt opgeslagen een puntkomma en via de macro een komma!

Nu nog even speuren of ik via de macro ook mee kan geven dat het scheidingsteken geen Engelse komma moet zijn, maar een puntkomma.
Hier heb ik zelf ook een keer naar gezocht. Mijn conclusie was dat er geen simpele manier is (m.a.w. geen variabele die je kan aanpassen) om de delimiter te specificeren. Als oplossing kwam ik wel het volgende tegen: https://excel.tips.net/T0..._CSV_File_in_a_Macro.html

Komt er op neer dat je eerst zelf al je kolommen samenvoegt in één kolom met de delimiter die je wil en dan pas exporteert als csv.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • coop
  • Registratie: Augustus 2005
  • Laatst online: 19:29
@joostman het lijkt te werken als je de volgende code gebruikt (uiteraard aanpassen naar eigen locatie en bestandsnaam.
code:
1
ActiveWorkbook.SaveAs Filename:="data.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True


Met Local:=True, geef je mee dat hij de lokale settings van de gebruiker moet nemen ipv standaard settings.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Probleem is inderdaad dat VBA standaard draait met "VS" locale. coop in "Excel macro vraag met CSV met kolommen opmaak" lost dat inderdaad op v.w.b. opslaan.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • joostman
  • Registratie: Oktober 2003
  • Laatst online: 02-05 07:29
Gelukt!

Bedankt coop voor zowel de scherpheid van de komma en puntkomma en de oplossing bovendien!

Overal waar ik las ging het over regionale instellingen aanpassen e.d. wat wisselend succes had.
Jouw toevoeging werkt perfect!
Pagina: 1