2017-01-25 6 views
0

ich Anfänger sind in VBA und hat einen Code zu schreiben, führt die folgenden:VBA: Kopieren Zeilen aus CSV in Spalten in neuer Arbeitsblatt

1- Abrufen aller CSV-Dateien in einem Ordner

2- put die Dateinamen in der ersten Zeile eines neuen Arbeitsblatts.

3- Kopie alle Spaltentitel (erste Reihe) aus den CSV-Dateien

4- sie unter jedem Dateinamen in neuen Arbeitsblatt in eine Spalte einzufügen.

Ich weiß, dass ich Bereich verwenden muss, aber ich bin verwirrt, wie man es benutzt.

Dies ist, was ich getan habe, um die CSV-Dateien zu bekommen. Ich habe Probleme mit dem Kopieren der Zeilen in Spalten:

Dim CSVPath 
Dim FS 
Dim file 
Dim wkb As Excel.Workbook 
Dim ResultsSheet As Worksheet 
Dim RowPtr As Range 
Dim CSVUsed As Range 

Set ResultsSheet = Sheet1 

'Clear the results sheet 
ResultsSheet.Cells.Delete 

Set FS = CreateObject("Scripting.FileSystemObject") 

'The CSV files are stored in a "CSV" subfolder of the folder where 
'this workbook is stored. 
CSVPath = ThisWorkbook.Path & "\CSV" 

If Not FS.FolderExists(CSVPath) Then 
    MsgBox "CSV folder does not exist." 
    Exit Sub 
End If 

For Each file In FS.GetFolder(CSVPath).Files 
    If Right(file.Name, 3) = "csv" Then 'Only look at files with .csv extension 
     Set wkb = Application.Workbooks.Open(file.Path) 

Next 

und ich weiß auch die Schleife in etwa so sein sollte:

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 

    For x = 2 To FinalRow 

jede Hilfe dankbar ist

Antwort

1

Probieren Sie etwas wie:

Dim wb1 As Workbook, wb2 As Workbook 
Dim colnum 
Dim arr1 
Dim range2 As Range 

colnum = 20 
Set wb2 = ThisWorkbook 

Set range2 = wb2.Worksheets("Sheet1").Range("A1") 'wherever I want to paste my data to 
For Each file In fs.getfolder(CSVPath).file 
     If Right(file.Name, 3) = "csv" Then 
      Set wb1 = Application.Workbooks.Open(file.Path) 
      arr1 = wb1.Worksheets("WHATEVER_ITS_NAME_IS").Range("A1").resize(1, colnum).Value 
      rowlen = UBound(arr1, 1) - LBound(arr1, 1) + 1 
      collen = UBound(arr1, 2) - LBound(arr1, 2) + 1 

      range2.Resize(rowlen, collen).Value = arr1 
     End If 
Next 

Es gibt viele Möglichkeiten, diese Katze zu häuten. Ich bin mir nicht sicher, ob mein Code funktioniert, aber vielleicht hilft das. Normalerweise möchte ich nicht jede Zelle durchlaufen. In VBA sind diese Art von Schleifen sehr langsam. Es ist besser, einfach das gesamte Array auf einmal zu kopieren. Verwenden Sie die Eigenschaft Range.Value, um die Array-Daten vom Range-Objekt

+0

festzulegen/abzurufen. Vielen Dank für Ihre Antwort. Ich habe eine Frage. über arr1 = wb1.Worksheets ("WHATEVER_ITS_NAME_IS") Range ("A1: Z1").. Wert Anzahl meiner Spalten sind mehr als (A1: Z1) ist es eine Möglichkeit, dass wir es bis zum einstellen Ende der letzten Zelle? – Navid

+0

Ja sicher, versuche range.resize (Zeilen, Spalten). MSDN ist eine gute Referenz für alle Excel VBA-Funktionen, -Objekte und -Methoden. – johnzilla

Verwandte Themen