Объединение нескольких текстовых файлов с одинаковым форматом заголовка с помощью Excel VBA?

#excel #vba

#excel #vba

Вопрос:

У меня есть несколько текстовых файлов, которые мне нужно объединить

Пример текстового файла

У всех одинаковые заголовки (за исключением названия изображения, но оно будет меняться в порядке возрастания: «HU1284 — Позиция 2.Blind», «HU1284 — Позиция 3.Blind» и т.д.), Но разное количество строк информации в их наборе данных. Я использовал макрос Excel для их объединения, но для этого требуется разделение каждого файла в программе, которая генерирует текстовые файлы, и это занимает много времени. Я пытаюсь избежать этого, если это возможно. Кто-нибудь сможет помочь мне изменить приведенный ниже скрипт VBA, чтобы он мог объединять эти текстовые файлы как есть? Заранее спасибо!!

 Public HeadLine As String
Public ThisLine As String
Public Checkfilenum
Public TotalRows
Public NDresults

Sub Comb_1()
' Comb_1 Macro Used to combine the text files together into a sindle result file if new data results
' in going over the row limit then attempt will be made to make a new dresult file by incrementing index.
' will loop through until a valid dresults file can be made.

nbook = ActiveWorkbook.Name
'checkfor opened dresults workbook
wcnt = 0
For Each w In Workbooks
If UCase(w.Name) Like "DRESULT*" Then
wcnt = 1
w.Activate
End If
Next
If wcnt = 1 And HeadLine = "FirstOne" Then HeadLine = ThisLine
    
' CHeck if adding new file will exceed 65536 limit of Excel (may need to change for 2007)
Call MaxNumRowscheck(nbook, wcnt)
' If dresults file is not opened then create it from thie file (nbook)
If wcnt = 0 Then
    'Check if this is the first file in this run so we have line 6 to compare against.
    If HeadLine = "FirstOne" Then HeadLine = ThisLine
    On Error GoTo exitsub
    ' create dresults (note will check for existance of one just in case.)
    ActiveWorkbook.SaveAs Filename:="dresults.xlsm", FileFormat:=xlNormal
    Workbooks("dresults.xlsm").Activate
    ' prep sheet
    Sheets(1).Name = "Combined data"
    
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _
        "_", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)) _
        , TrailingMinusNumbers:=True
    Range("A3").Select
    Selection.TextToColumns Destination:=Range("A3"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, OtherChar _
        :="_", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
    Range("A4").Select
   
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    
    Range("G1:J1").Select
    Selection.Cut
    Range("A8").Select
    ActiveSheet.Paste
    Range("G3").Select
    Selection.Cut
    Range("E8").Select
    ActiveSheet.Paste
    
    Rows("1:6").Select
    Selection.Delete Shift:=xlUp
    
    Range("A2:E2").Select
    Selection.Copy
    
    Range(Selection, Selection.End(xlDown)).Select
    Selection.FillDown
    
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 5).Range("A1").Select
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, -1).Range("A1").Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Exp_Round"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Within_Round_Pair"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Within_Pair_Imaged_Seq"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "Image_Number"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Mask"
    
    Range("A1").Select
    
ElseIf ThisLine = HeadLine Then
    ' repeat work above but for files just being prepared and appended
    ' using the previously started dresults file
  

Комментарии:

1. «Может ли кто-нибудь помочь мне изменить приведенный ниже скрипт VBA, чтобы он мог объединять эти текстовые файлы как есть» — что вы подразумеваете под «как есть» здесь? Чем отличается вывод «как есть»? Все ли данные прибора в одном файле или по одному файлу на изображение? Не совсем ясно, какие изменения вы хотите внести. Также не ясно, при каких условиях выполняется ваш опубликованный код — все входные файлы уже открыты или?

2. Спасибо за ваш ответ и запрос дополнительных данных. Я полагаю, что наконец-то разобрался, но я ценю ваше намерение помочь!