2015-12-06 2 views
-1

Я работаю над макросом, чтобы импортировать текстовые файлы в рабочий лист. Я записал макрос и немного скорректировал код в соответствии с моими потребностями. Мне нужно сделать это для нескольких файлов, поэтому я скопировал и вставил код в другие макросы, и у меня возникла проблема. Первая итерация отлично работает, но когда я запускаю вторую, она перемещает исходные данные, которые я импортировал по нескольким столбцам справа, начиная с столбца АА, и отправляет следующую партию данных в столбце А, где она должна быть, но намного ниже в строке с последней строкой данных из первой партии. Может ли кто-нибудь предположить, почему это не просто добавление новых данных ниже последней строки из предыдущей итерации? Вот мой код. (отредактировано). Я изменил код, вставленный во вторую итерацию, которая показывает последнюю строку строки, в отличие от первой строки, жестко закодированной.VBA импортирует несколько текстовых файлов. Сохраняет данные перемещения

Sub Upload2() 
row = ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row 
filepath = Worksheets("Upload").Cells(5, "H") 
Worksheets("Data Dump").Activate 
With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;" + filepath, Destination:=Cells(row, "A")) 
    '.CommandType = 0 
    .Name = "bench test" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 65001 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .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) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 

Dim Cn As Variant 

Application.EnableEvents = False 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

For Each Cn In ThisWorkbook.Connections 
    Cn.Delete 
Next Cn 
For Each Cn In ActiveSheet.QueryTables 
    Cn.Delete 
Next Cn 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 

Благодаря Макс

+0

См. Пересмотренный ответ после публикации кода с указанием ошибки ... – EEM

+0

Вы пробовали ответ? – EEM

ответ

0

Edit:После размещения кода дает ошибку.

Код делает это, потому что он импортирует следующий текстовый файл, начиная с последней строки предыдущего файла.

Заменить строку:

row = ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row 

с этим

row = 2 + ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row 

Предлагайте добавить 2 линии для того, чтобы оставить одна пустая строка между каждым из текстовых файлов для облегчения идентификации и проверки целостности после этого.

+0

Спасибо EEM. Я скопировал первую итерацию этого макроса, чтобы опубликовать здесь, но в последующих итерациях у вас есть линия, которую вы уже предложили. Сорру, я должен был разместить один из них вместо первого, так как он действительно работает правильно. Спасибо за вход, все равно. – Maxtork

+0

Не умею вообще публиковать кусок, который работает ... И все же, еще не отправил кусок с проблемами ... – EEM

+0

Жаль, что это на моем другом компьютере. Я отправлю его позже, когда у меня будет шанс. – Maxtork

-1

В новых версиях excel, когда использовался текст в столбцах, весь лист настроен так, чтобы сделать это из выбранного столбца.

На последующих циклах пропустить текст столбцов секции и просто вставить файл в седловине A

Или импортировать все файлы, а затем сделать. Текст в столбцы

+0

Большое спасибо Стивен. Я попробую этот подход. Поэтому, если я пропущу текст в столбцы, которые будут включать все из этой строки: с помощью ActiveSheet.QueryTables.Add (Connection: = _ «ТЕКСТ;» + путь к файлу, назначение: = ячейки (строка, «A»)) до этого строка правильная? .Refresh BackgroundQuery: = False Завершить с благодарностью за помощь, Макс – Maxtork

Смежные вопросы