2017-01-25 32 views
0

我初学VBA和有写,做下面的代码:一个文件夹VBA:复制从CSV行转换成列在新的工作表

2-放于

1检索所有CSV文件新工作表第一行中的文件名称。

3-拷贝一切从CSV文件列标题(第一行)

4-将它们粘贴到一个栏下在新的工作表,每个文件名。

我知道我需要使用范围,但我很困惑如何使用它。

这就是我所做的获取csv文件。我与行复制到列问题:

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 

,也是我知道的循环应该是这样的:

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

    For x = 2 To FinalRow 

任何帮助表示赞赏

回答

1

试着这么做:

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 

有很多方法来剥皮这只猫。不知道我的代码是否有效,但这可能会有所帮助。通常我不喜欢循环遍历每个单元格。在VBA中,这些循环非常缓慢。一次只复制整个阵列会更好。使用属性Range.Value来设置/获取来自Range对象的数组数据

+0

感谢您的回应。我虽然有一个问题。关于 arr1 = wb1.Worksheets(“WHATEVER_ITS_NAME_IS”)。范围(“A1:Z1”)。值 我的列数大于(A1:Z1)有没有什么方法可以将它设置为最后一个细胞的末端? – Navid

+0

是的,请尝试range.resize(行,列)。 MSDN是所有Excel VBA函数,对象,方法的绝佳参考。 – johnzilla

相关问题