Есть много способов импортировать текстовый файл на текущий лист. Вот три (включая метод, который вы используете выше)
- Используя QueryTable
- Откройте текстовый файл в памяти, а затем записать текущий лист и, наконец, применяя текст на столбцы, если требуется.
- Если вы хотите использовать метод, который вы сейчас используете, то после открытия текстового файла в новой книге, просто скопируйте его к текущему листу с помощью
Cells.Copy
Используя QueryTable
Вот простой макрос, который я записал. Пожалуйста, внесите изменения в соответствии с вашими потребностями.
Sub Sample()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Sample.txt", Destination:=Range("$A$1") _
)
.Name = "Sample"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Откройте текстовый файл в памяти
Sub Sample()
Dim MyData As String, strData() As String
Open "C:\Sample.txt" For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
End Sub
После того, как у вас есть данные в массиве вы можете экспортировать его в текущем листе.
Используя метод, который вы уже используете
Sub Sample()
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet
Set wbI = ThisWorkbook
Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import
Set wbO = Workbooks.Open("C:\Sample.txt")
wbO.Sheets(1).Cells.Copy wsI.Cells
wbO.Close SaveChanges:=False
End Sub
Followup
Вы можете использовать Application.GetOpenFilename
выбрать соответствующий файл. Например ...
Sub Sample()
Dim Ret
Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn")
If Ret <> False Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Ret, Destination:=Range("$A$1"))
'~~> Rest of the code
End With
End If
End Sub
Посмотрите, как метод QueryTable является самым прямым, но есть ли способ добавить к нему диалоговое окно, поэтому у меня будет возможность выбирать текстовые файлы из разных источников? –
Да. Один момент ... обновление сообщения –
Обновлено сообщение :) Смотрите 'FOLLOWUP' –