Импорт текстового файла Loop при добавлении имени файла
Я новичок в Excel VBA и у меня возникли проблемы. Я создаю макрос, который возьмет файл.dat (импортирует как файл.txt) и поместит имя файла в первую строку, а затем все данные под ним, начиная со строки 2. Затем программа зацикливается и снова запускает процесс 3 строк больше (в данных много строк, но только 3 столбца).
В настоящее время мой макрос будет правильно помещать импортированные данные, но имя файла записывается неправильно. Он будет вводить имя файла в A1, циклически вводит имя файла в D3, удаляя имя файла из A1. Я не могу понять, что происходит не так.
Sub ImportDataFiles()
'call out variables
Dim fName As String, LastCol As Long, fileName As String, fso As Object
'loop start
BEGINNING:
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
fName = Application.GetOpenFilename("All Files, *.dat")
Set fso = CreateObject("Scripting.FileSystemObject")
fileName = fso.GetFilename(fName)
'fileName is just the file name from the path
Range(Cells(1, LastCol).Address).Value = fileName
If fName = "False" Then Exit Sub
'Imports data from text file
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fName, _
Destination:=Cells(2, LastCol))
.TextFileStartRow = 30
.TextFileParseType = xlDelimited
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
'loop end
If MsgBox("Do you want to do it again?", vbYesNo) = vbYes Then GoTo BEGINNING
End With
End Sub
2 ответа
Это получит номер столбца последней занятой ячейки в строке 1 (или первой ячейки, если в строке ничего нет)
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Если вы начнете заполнять контент в этой позиции, вы (за исключением случая пустой строки) перезапишете контент в этой ячейке.
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
Дает вам первую пустую ячейку [справа] в этом ряду. Но это не учитывает содержимое импортируемого файла, который имеет несколько столбцов. Если ваш импортированный файл имеет 3 столбца, то вам нужно сместить дальше...
Чтобы изменить формат с широкого на длинный, просто измените LastCol
в LastRow
с изменениями в следующих четырех строках кода.
Dim ... LastRow As Long, ...
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
...
Range(Cells(LastRow + 1, 1).Address).Value = fileName
...
Destination:=Cells(LastRow + 2, 1))
Это также разрешает перезапись FileName и позволяет вам продолжить последующий импорт файла.dat.