2015-06-03 5 views
0

У меня есть сценарий, который я собрал для импорта нескольких текстовых файлов, которые являются полными двоеточиями, разделенными на новые книги для каждого выбранного файла. Он составляет около 99% функциональности, кроме того, что он, кажется, вставляет все данные из выбранных текстовых файлов в столбец после правильно импортированных столбцов в новую книгу. Я не совсем уверен, какая часть кода вызывает вложение этой конкретной строки. Ниже приведена основная часть кода. Может ли кто-нибудь определить, где может быть проблема?Импорт нескольких текстовых файлов в новые рабочие книги Excel с Excel VBA

Также я хочу сказать спасибо сообществу здесь. Я многому научился, просмотрев другие сообщения на этом форуме.

FilesToOpen = Application.GetOpenFilename _ 
    (FileFilter:="Text Files (*.txt), *.txt", _ 
    MultiSelect:=True, Title:="Text Files to Open") 



For i = LBound(FilesToOpen) To UBound(FilesToOpen) 
    Set wkb = Workbooks.Open(FilesToOpen(i)) 
    Set wks = wkb.ActiveSheet 
    With wks.QueryTables.Add(Connection:= _ 
     "TEXT;" & FilesToOpen(i), Destination:=Range("A1")) 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .RefreshStyle = xlInsertDeleteCells 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = True 
     .TextFileTabDelimiter = False 
     .TextFileSemicolonDelimiter = True 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(2, 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) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
Next i 
+0

Где вы хотите выход идти? Прямо сейчас вы создаете 'QueryTable' в' wks', который является 'ActiveSheet'' wkb', который является только что открывшимся файлом. Вы хотите, чтобы результат в файле, который вы открываете? Затем, если это то, что вы хотите, тогда 'Destination: = Range (« A1 »)' определяет фактическое место на этом «Worksheet», где начинается новая таблица. –

+0

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

+0

Ваш код открывает текстовый файл _as 'Workbook'_, который совпадает с' File-> Open'. Исходные данные есть, потому что ** он был там, когда вы начали **. Если вам действительно нужна ** новая ** «Книга», вам нужно явно создать ее с помощью «Set wkb = Workbooks.Add» вместо текущей строки. Нет необходимости «открывать» текстовый файл, если вы хотите создать для него подключение к данным; 'Connection' обрабатывает все это. –

ответ

0

Ваш вопрос является использование Workbooks.Open, чтобы получить новый Workbook. Вы действительно открываете текстовый файл так же, как и для File->Open. Если вы хотите отправить Workbook, введите его явно, используя Set wkb = Workbooks.Add() вместо текущего звонка на Workbooks.Open. Вы видите данные файла, потому что сначала открыли файл.

Полный код

FilesToOpen = Application.GetOpenFilename _ 
    (FileFilter:="Text Files (*.txt), *.txt", _ 
    MultiSelect:=True, Title:="Text Files to Open") 



For i = LBound(FilesToOpen) To UBound(FilesToOpen) 
    Set wkb = Workbooks.Add() 
    Set wks = wkb.ActiveSheet 
    With wks.QueryTables.Add(Connection:= _ 
     "TEXT;" & FilesToOpen(i), Destination:=Range("A1")) 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .RefreshStyle = xlInsertDeleteCells 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = True 
     .TextFileTabDelimiter = False 
     .TextFileSemicolonDelimiter = True 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(2, 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) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
Next i 
Смежные вопросы