更改VBA CreateObject(“Scripting.FileSystemObject”)。OpenTextFile(文件名).ReadAll到较低的内存占用

所以我有一个巨大的CSV文件,必须转换之前加载到Excel电子表格(由于Excel 2010的限制)。 这个代码似乎做的伎俩,直到文件变大(> 30mb)。

Sub transpose_delimited_file(sheet, filename, skip_columns, delimiter) Dim temp As String Dim i As Long, x temp = CreateObject("Scripting.FileSystemObject").OpenTextFile(filename, 1).ReadAll x = Split(temp, vbCrLf): temp = "" For i = 0 To UBound(x) - 1 y = Split(x(i), delimiter) ThisWorkbook.Sheets(sheet).Cells(1, i + 1 + skip_columns).Resize(UBound(y) + 1).Value = _ Application.Transpose(y) Next 

那么如何改变上面的代码来避免内存不足的错误呢? 是否有办法将ReadAll更改为只读X行,然后转置并粘贴到工作表中以保持内存空闲? 非常感激。

最好的尝试是逐行读取文件并将其作为列粘贴到目标工作表中。 下面的代码使用原始I / O应该实现它:

 Sub transposeDelimitedFile(ByRef sh As Worksheet, ByVal fName As String, _ Optional ByVal startCol As Long = 1, _ Optional ByVal delim As String = ",") Dim sLine As String, ar Open fName For Input As #1 Do Until EOF(1) Line Input #1, sLine ar = Split(sLine, delim) sh.Columns(startCol).Resize(UBound(ar) + 1).value = Application.Transpose(ar) startCol = startCol + 1 Loop Close #1 End Sub 

 Sub Test() transposeDelimitedFile Worksheets("Sheet1"), "C:\SO\SO.CSV", 6, "," End Sub