Всем здравствуйте. У меня есть много файлов. В каждом из них разное количество строк. Но одна таблица присутствует всегда (залита желтым цветом первая ячейка N262 в моем примере). Мне необходимо таблицу скопировать в отдельный файл (ЖО_7_свод) название листа взять из ячейки F3. Т.е. в файле ЖО_7_свод должны быть листы из файлов источников. Буду признателен за помощь.
Всем здравствуйте. У меня есть много файлов. В каждом из них разное количество строк. Но одна таблица присутствует всегда (залита желтым цветом первая ячейка N262 в моем примере). Мне необходимо таблицу скопировать в отдельный файл (ЖО_7_свод) название листа взять из ячейки F3. Т.е. в файле ЖО_7_свод должны быть листы из файлов источников. Буду признателен за помощь.Mark1976
pt0 = ActiveWorkbook.Path fil = Dir(pt0 & "\*.xls*") Do While Len(fil) > 0 Debug.Print fil If fil <> wb.Name Then Set wbi = Workbooks.Open(pt0 & "\" & fil).Worksheets(1) With wbi Set rx = .Cells.Find("Обороты для главной книги") If Not rx Is Nothing Then nt = rx.Row cn = rx.Column ck = cn + rx.MergeArea.Count - 1 Set rx = .Cells.Find("итого по журналу операций") If Not rx Is Nothing Then kt = rx.Row per = .[f3] est = ЛИСТСУЩ(per) If est Then MsgBox "Дубль периода " & per, vbCritical, "" Else With wb.Worksheets.Add .Name = per wbi.Cells(nt, cn).Resize(kt - nt + 1, ck - cn + 1).Copy wb.Worksheets(per).Cells(1, 1) End With End If End If
End If End With
wbi.Parent.Close End If fil = Dir() Loop Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Function ЛИСТСУЩ(ИМЯ As String) As Boolean Dim Sh As Object On Error Resume Next Set Sh = ActiveWorkbook.Sheets(ИМЯ) If Err.Number = 0 Then ЛИСТСУЩ = True End Function
[/vba]
как-то так: [vba]
Код
Option Explicit
Sub собрать_таблицы() Dim wb As Workbook Dim wbi, per$, est Dim pt0, pat, fil, nt, cn, ck, kt, rx As Range Set wb = ActiveWorkbook
pt0 = ActiveWorkbook.Path fil = Dir(pt0 & "\*.xls*") Do While Len(fil) > 0 Debug.Print fil If fil <> wb.Name Then Set wbi = Workbooks.Open(pt0 & "\" & fil).Worksheets(1) With wbi Set rx = .Cells.Find("Обороты для главной книги") If Not rx Is Nothing Then nt = rx.Row cn = rx.Column ck = cn + rx.MergeArea.Count - 1 Set rx = .Cells.Find("итого по журналу операций") If Not rx Is Nothing Then kt = rx.Row per = .[f3] est = ЛИСТСУЩ(per) If est Then MsgBox "Дубль периода " & per, vbCritical, "" Else With wb.Worksheets.Add .Name = per wbi.Cells(nt, cn).Resize(kt - nt + 1, ck - cn + 1).Copy wb.Worksheets(per).Cells(1, 1) End With End If End If
End If End With
wbi.Parent.Close End If fil = Dir() Loop Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Function ЛИСТСУЩ(ИМЯ As String) As Boolean Dim Sh As Object On Error Resume Next Set Sh = ActiveWorkbook.Sheets(ИМЯ) If Err.Number = 0 Then ЛИСТСУЩ = True End Function
alex77755, спасибо за решение. Немного не понял как макрос работает. Я так понимаю, он собирает данные из файлов, которые находятся в отдельной папке?
alex77755, спасибо за решение. Немного не понял как макрос работает. Я так понимаю, он собирает данные из файлов, которые находятся в отдельной папке?Mark1976