CSV importeren in Excel m.b.v. macro.

Pagina: 1
Acties:
  • 1.601 views

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem
Voor mijn werk ben ik bezig met een Excel bestand, waarin gegevens in .csv-formaat kunnen worden geïmporteerd. De klant levert namelijk elke maand gegevens uit zijn kassasysteem aan in dat formaat. Vervolgens moet die data worden gerecapituleerd en verwerkt in een journaalpost. Dat laatste heb ik al voor elkaar, maar het werkt nu alleen met Excel (*.xlsx) bestanden. Bij het importeren van een .csv-bestand gaat het mis op het splitsen van de kolommen. Deze bestanden zijn gescheiden met ";", maar dit wordt niet herkend. Als ik het .csv-bestand rechtstreeks met Excel open gaat dit wel goed.

Mijn vraag
Via dit forum wil ik vragen of iemand voor mij een stukje script in Visual Basic wil schrijven waarmee een .csv-bestand in Excel wordt geïmporteerd. Van belang is dat de gebruiker een bestand kan selecteren en dat in het script gekozen kan worden op welk blad de data komt te staan, door het wijzigen van de TargetSheet. Uiteindelijk worden namelijk 4 bestanden geïmporteerd die samen de journaalpost maken. Bij het importeren moet Excel dus rekening houden met het scheiden van de kolommen op de plaats waar een ";" staat.

Gebruikte software
- Excel 2010

Voorbeeldscrip import van Excel-bestand
Hieronder de code waarmee een Excel bestand kan worden geïmporteerd. Een soortgelijke werking zou ik graag zien bij het importeren van een .csv bestand.
Sub Verkopen()

Application.ScreenUpdating = False

Dim customerBook As Workbook
Dim filter As String
Dim caption As String
Dim customerFilename As String
Dim customerWorkbook As Workbook
Dim targetWorkbook As Workbook

Set targetWorkbook = Application.ActiveWorkbook

filter = "Excel bestanden (*.xlsx),*.xlsx"
caption = "Open een bestand "
customerFilename = Application.GetOpenFilename(filter, , caption)

Set customerWorkbook = Application.Workbooks.Open(customerFilename)

Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets(2)
Dim sourceSheet As Worksheet
Set sourceSheet = customerWorkbook.Worksheets(1)

targetSheet.Range("A1", "Z99").Value = sourceSheet.Range("A1", "Z99").Value

customerWorkbook.Close

End Sub
Bovenstaande code heb ik ook niet zelf geschreven. Bron.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 01-09 08:19
Dit bedoel je?

http://stackoverflow.com/...xcel-non-active-worksheet

Het volgende stukje code bepaald het scheidingsmechanisme :
code:
1
2
3
4
5
6
7
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False

[ Voor 40% gewijzigd door Montaner op 05-09-2016 09:10 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 05 september 2016 @ 09:05:
Via dit forum wil ik vragen of iemand voor mij een stukje script in Visual Basic wil schrijven [...]
Nee: Devschuurder werven? Gebruik Vraag & Aanbod!

Daarnaast horen (inhoudelijke!) vragen over Excels en VBS in Client Software Algemeen, niet hier: Waar hoort mijn topic?

Volgende keer zou het fijn zijn als je even de topics bovenaan de lijst met onderwerpen leest voordat je een topic in een bepaald subforum start. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Dit topic is gesloten.