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

VBA-code om meerdere CSV-bestanden tegelijk in te lezen

Status
Niet open voor verdere reacties.

AlexCEL

Meubilair
Lid geworden
3 apr 2014
Berichten
8.338
Ik loop weer eens tegen mijn beperkte kennis van VBA aan, enige assistentie is dus welkom.

Aangeleverd krijg ik meerdere CSV-files met telemetriegegevens. Deze wil ik inlezen in excel in één werkblad, elk op een separaat tabblad, waarna ik er overzichten van kan maken. Een enkele file lukt wel middels:
Code:
Sub OpenCsv()
    Workbooks.OpenText Filename:=".\test.csv", Local:=True
End Sub
Maar dit moet ik dus uitbreiden naar test1, test2, test3 etc... zoals gezegd elk op een eigen tabblad.

Iemand een suggestie?
 
AlexCel, kun je hier iets mee?

Code:
    vFilename = Application.GetOpenFilename("MS Excel 2003 bestanden (*.xls),*.xls", , "Selecteer het/de in te lezen bestand(en)", , True)
    If TypeName(vFilename) = "Boolean" Then Exit Sub
'hier begint de lus
    For lCount = LBound(vFilename) To UBound(vFilename)
        Workbooks.Open vFilename(lCount)


verdere code



'ga naar het begin van de lus
    Next lCount
'hier is de lus klaar
 
Gebruik svp eenduidige aanduidingen: werkboek (= excelbestand= VB: Workbook) en werkblad (=tabblad = VBA: sheet)

Code:
Sub M_snb()
  for j=1 to 10
    if dir("G:\OF\Test" & j & ".csv") <>"" then thisworkbook.sheets.add ,thisworkbook.sheets(thisworkbook.sheets.count),,"G:\OF\Test" & j & ".csv"
  next
End Sub
of
Code:
Sub M_snb()
  with thisworkbook
    for j=1 to 10
      if dir("G:\OF\Test" & j & ".csv") <>"" then .sheets.add ,.sheets(.sheets.count),,"G:\OF\Test" & j & ".csv"
    next
  end with
End Sub
 
Laatst bewerkt:
Haije & snb, hartelijk dank voor de input.

Mijn representatie van de bestandsnamen was te simpel, in de praktijk zijn ze niet mooi opvolgend. Ik moet bijvoorbeeld "DW-71.csv" combineren met "DW-19.75.csv". Na enig experimenteren heb ik heb jullie codes daarom gecombineerd tot onderstaande. Ik kan nu csv's selecteren, waarna ze op een nieuwe blad geopend worden.

Code:
Sub OpenCsv()
    vfilename = Application.GetOpenFilename("CSV-bestanden (*.csv),*.csv", , "Selecteer het/de in te lezen bestand(en)", , True)
    If TypeName(vfilename) = "Boolean" Then Exit Sub
        For lcount = LBound(vfilename) To UBound(vfilename)
            ThisWorkbook.Sheets.Add , ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count), , vfilename(lcount)
        Next lcount
End Sub

Echter: met deze code wordt de csv niet correct geïmporteerd. De ";" wordt niet herkend als scheidingsteken....

Nog ideeën om dit op te lossen?

Edit:
hier nog een aantal voorbeeldjes: Bekijk bijlage CSV's combineren.zip
 
Laatst bewerkt:
Code:
Sub M_snb()
    With Application.FileDialog(3)
       .InitialFileName = "*.csv"
       .AllowMultiSelect = True
       If .Show Then
          For Each it In .SelectedItems
            ThisWorkbook.Sheets.Add , ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count), , it
            thisworkbook.sheets(sheets.count).columns(1).texttocolumns,,,,0,-1,0,0,0
          Next
        End If
    End With
End Sub
 
Ja.... dit is het bijna!

Nog 2 opmerkingen:
1. Ik krijg bij importeren een melding "Er bevinden zich hier al gegevens. Wilt u deze vervangen"...
2. het importeren van de CSV gaat nog niet helemaal goed. Zo wordt bijvoorbeeld 1503,183 afgerond naar 1503; 8,35E-2 naar 8.
 
Ad 1. stop de macro en kijk naar het bestand/het werkblad dat deze melding produceert (het betekent nl. dat gegevens al wel over verschillende kolommen zijn verdeeld.)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan