VBA:将单元格从一个工作簿复制到另一个工作簿,不适用于大数据

我已经开发了以下代码来导出目录中所有csv文件的数据,并将它们放在一个新的工作簿中。 它适用于数量较less的数据,但是当我们有成千上万的行时,它将无法工作。

Sub Button4_Click() Dim CSVPath Dim thisWb As Workbook Dim wkb As Excel.Workbook Dim CSVUsed As Range Dim i As Integer Set thisWb = ActiveWorkbook Workbooks.Add ActiveWorkbook.SaveAs Filename:=thisWb.Path & "\new_workbook.xls" 'ActiveWorkbook.Close savechanges:=False Set FS = CreateObject("Scripting.FileSystemObject") CSVPath = ThisWorkbook.Path & "\CSV" If Not FS.FolderExists(CSVPath) Then MsgBox "CSV folder does not exist." Exit Sub End If Set thisWb = ActiveWorkbook For Each file In FS.GetFolder(CSVPath).Files If Right(file.Name, 3) = "csv" Then Set wkb = Application.Workbooks.Open(file.Path) Set CSVUsed = wkb.Sheets(1).UsedRange For i = 1 To CSVUsed.Rows.Count For j = 1 To CSVUsed.Columns.Count thisWb.Sheets(1).Cells(j, i).Value = CSVUsed.Cells(j, i).Value Next Next End If Next End Sub 

由于列数不固定,我没有使用范围。 有人可以帮忙吗?

我认为Cells参数是RowColumn不是 ColumnRow 。 在阅读这些线

  For i = 1 To CSVUsed.Rows.Count For j = 1 To CSVUsed.Columns.Count thisWb.Sheets(1).Cells(j, i).Value = CSVUsed.Cells(j, i).Value 

我相信你已经交换了行和列。 我很惊讶,它在小的情况下工作正常,除非行和列计数恰好足够接近您的打样。 此外, ij可能需要long而不是int

如果将其定义为整数,则最大值将为32,768,如果数据集大于此值,则可能会导致计数问题。 -VBA皮特

对于列来说并不重要,因为最大值是16,384,但是可以有1,048,576行。