Вам на самом деле не нужно использовать TextToColumns
. Для первого файла CSV лист уже существует, а для второго вы можете открыть файл как другую книгу, а затем использовать метод Worksheet.Copy
, чтобы скопировать лист после первого.
Вот, пожалуйста:
Const xlWorkbookDefault = 51
Dim sourceFile1, sourceFile2, outputFile
Dim xlApp, xlWorkbook1, xlWorkbook2
sourceFile1 = "...\CSV1.csv"
sourceFile2 = "...\CSV2.csv"
outputFile = "...\output.xlsx"
Set xlApp = CreateObject("Excel.Application")
With xlApp
Set xlWorkbook1 = .Workbooks.Open(sourceFile1)
Set xlWorkbook2 = .Workbooks.Open(sourceFile2)
xlWorkbook2.Sheets(1).Copy , xlWorkbook1.Sheets(1)
xlWorkbook2.Close
.xlWorkbook1.SaveAs outputFile, xlWorkbookDefault
.Quit
End With
Чтобы сделать его более общим, вы можете настроить предыдущий код для работы с любым количеством CSV-файлов:
Const xlWorkbookDefault = 51
Dim sourceFiles(5)
Dim outputFile
Dim xlApp, xlWorkbook1, xlWorkbook2
sourceFiles(0) = "...\CSV1.csv"
sourceFiles(1) = "...\CSV2.csv"
sourceFiles(2) = '...
' TODO: Add more files.
outputFile = "...\output.xlsx"
Set xlApp = CreateObject("Excel.Application")
With xlApp
Set xlWorkbook1 = .Workbooks.Open(sourceFiles(0))
For i = 1 To UBound(sourceFiles)
Set xlWorkbook2 = .Workbooks.Open(sourceFiles(i))
xlWorkbook2.Sheets(1).Copy , xlWorkbook1.Sheets(i)
xlWorkbook2.Close
Next
.xlWorkbook1.SaveAs outputFile, xlWorkbookDefault
.Quit
End With