Я новичок в 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
Вам нужно добавить что-то в 'LastCol', иначе вы собираетесь перезаписывать предыдущие значения ... –
Также кажется, что используется' End (xlToLeft) .Columns' вместо 'End (xlUp) .Rows', вы собираетесь выравнивать данные текстового файла бок о бок, а не складывать друг над другом. Обычно данные и отчеты обрабатываются в длинных нешироких форматах. См. Примечание Бруина здесь (http://www.rondebruin.nl/win/s9/win005.htm). – Parfait
@ Тим-Уильямс, не могли бы вы объяснить больше? Вы предлагаете бессмысленное приращение, потому что LastCol будет выравниваться с импортом данных. – IrishThunder23