Пытаюсь адаптировать код под свои нужды А именно скопировать содержимое от 4ой строки до строки, содержащей "Итого по ресурсному расчету:" в третьем столбце в новую книгу (хотя можно и в существующую - только вкладок мб много)....
[vba]
Код
Sub ИзЛистовВОдин() Dim ws As Worksheet Set wbCurrent = ActiveWorkbook Workbooks.Add Set wbReport = ActiveWorkbook 'копируем на итоговый лист шапку таблицы из первого листа wbCurrent.Worksheets(1).Range("A4:G4").Copy Destination:=wbReport.Worksheets(1).Range("A1")
'проходим в цикле по всем листам исходного файла For Each ws In wbCurrent.Worksheets
'определяем номер последней строки на текущем листе и на листе сборки ' N = wbReport.Worksheets(1).Range("С1:С").CurrentRegion.Rows.Count ' до слов Итого по ресурсному расчету:
' ' For i = 3 To Cells(Rows.Count, 3).End(xlUp).Row 'If Cells(i, 3) = "Итого по ресурсному расчету:" Then '' Cells(i, 3).Select '' Selection.Copy '' Range("T4").Select '' ActiveSheet.Paste ' End If 'Next
'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор: ' Set rngData = ws.Range("A1:D5") 'фиксированный диапазон или ' Set rngData = ws.UsedRange 'всё, что есть на листе или ' Set rngData = ws.Range("F5").CurrentRegion 'область, начиная от ячейки F5 или Set rngData = ws.Range("A4", ws.Range("A4").SpecialCells(xlCellTypeLastCell)) 'от А2 и до конца листа
'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки rngData.Copy Destination:=wbReport.Worksheets(1).Cells(N + 1, 1)
Next ws End Sub
[/vba]
Что характерно - столбец 3 содержит последнюю строку с текстом "Итого по ресурсному расчету:" Именно ее я пытался найти чтобы задать диапазон от 4ой строки и до строки содержащей "Итого по ресурсному расчету:" в третьем столбце (повторюсь).
код работал, пока я не начал вставлять наработки минулых лет. В таком виде он копирует лишь последний лист в новую книгу.
Добрый день дамы и господа
Пытаюсь адаптировать код под свои нужды А именно скопировать содержимое от 4ой строки до строки, содержащей "Итого по ресурсному расчету:" в третьем столбце в новую книгу (хотя можно и в существующую - только вкладок мб много)....
[vba]
Код
Sub ИзЛистовВОдин() Dim ws As Worksheet Set wbCurrent = ActiveWorkbook Workbooks.Add Set wbReport = ActiveWorkbook 'копируем на итоговый лист шапку таблицы из первого листа wbCurrent.Worksheets(1).Range("A4:G4").Copy Destination:=wbReport.Worksheets(1).Range("A1")
'проходим в цикле по всем листам исходного файла For Each ws In wbCurrent.Worksheets
'определяем номер последней строки на текущем листе и на листе сборки ' N = wbReport.Worksheets(1).Range("С1:С").CurrentRegion.Rows.Count ' до слов Итого по ресурсному расчету:
' ' For i = 3 To Cells(Rows.Count, 3).End(xlUp).Row 'If Cells(i, 3) = "Итого по ресурсному расчету:" Then '' Cells(i, 3).Select '' Selection.Copy '' Range("T4").Select '' ActiveSheet.Paste ' End If 'Next
'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор: ' Set rngData = ws.Range("A1:D5") 'фиксированный диапазон или ' Set rngData = ws.UsedRange 'всё, что есть на листе или ' Set rngData = ws.Range("F5").CurrentRegion 'область, начиная от ячейки F5 или Set rngData = ws.Range("A4", ws.Range("A4").SpecialCells(xlCellTypeLastCell)) 'от А2 и до конца листа
'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки rngData.Copy Destination:=wbReport.Worksheets(1).Cells(N + 1, 1)
Next ws End Sub
[/vba]
Что характерно - столбец 3 содержит последнюю строку с текстом "Итого по ресурсному расчету:" Именно ее я пытался найти чтобы задать диапазон от 4ой строки и до строки содержащей "Итого по ресурсному расчету:" в третьем столбце (повторюсь).
код работал, пока я не начал вставлять наработки минулых лет. В таком виде он копирует лишь последний лист в новую книгу.Yar4i
Макрос в стандартный модуль, запускать при активном листе "Нужно так" [vba]
Код
Sub Sbor() Dim Sht As Worksheet Dim iLastRow As Long Dim FoundItogo As Range Cells.Clear For Each Sht In Worksheets If Sht.Name <> "Нужно так" Then ' кроме листа "Нужно так" With Sht iLastRow = Cells(Rows.Count, 3).End(xlUp).Row + 2 Set FoundItogo = .Columns(3).Find("Итого по ресурсному расчету:", , xlValues, xlWhole) .Range("A4:G" & FoundItogo.Row).Copy Cells(iLastRow, 1) End With End If Next End Sub
[/vba]
Макрос в стандартный модуль, запускать при активном листе "Нужно так" [vba]
Код
Sub Sbor() Dim Sht As Worksheet Dim iLastRow As Long Dim FoundItogo As Range Cells.Clear For Each Sht In Worksheets If Sht.Name <> "Нужно так" Then ' кроме листа "Нужно так" With Sht iLastRow = Cells(Rows.Count, 3).End(xlUp).Row + 2 Set FoundItogo = .Columns(3).Find("Итого по ресурсному расчету:", , xlValues, xlWhole) .Range("A4:G" & FoundItogo.Row).Copy Cells(iLastRow, 1) End With End If Next End Sub
Спасибо, работает, но когда клонирую второй лист и запускаю с "Нужно так", то код ругается на 91 ый символ в строке (т.е. уже с 3х листов приходится коду копировать) [vba]
Спасибо, работает, но когда клонирую второй лист и запускаю с "Нужно так", то код ругается на 91 ый символ в строке (т.е. уже с 3х листов приходится коду копировать) [vba]
Спасибо все работает. Не знаю причину, но несколько раз в одном и тот же файле (своем с 20 листами) запускал код... сначала ошибка вылазила 91 , а потом попробовал на 3 листах и все хорошо запустилось.
Спасибо.
Итого по ресурсному расчету - везде точно есть - это шаблон сметной программы.
Спасибо все работает. Не знаю причину, но несколько раз в одном и тот же файле (своем с 20 листами) запускал код... сначала ошибка вылазила 91 , а потом попробовал на 3 листах и все хорошо запустилось.
Спасибо.
Итого по ресурсному расчету - везде точно есть - это шаблон сметной программы.Yar4i
Добавьте в код проверку: есть ли такая строка на листе [vba]
Код
Set FoundItogo = .Columns(3).Find("Итого по ресурсному расчету:", , xlValues, xlWhole) If Not FoundItogo Is Nothing Then .Range("A4:G" & FoundItogo.Row).Copy Cells(iLastRow, 1) Else MsgBox "Не найдена строка 'Итого по ресурсному расчету:' на листе " & Sht.Name End If
[/vba]
Добавьте в код проверку: есть ли такая строка на листе [vba]
Код
Set FoundItogo = .Columns(3).Find("Итого по ресурсному расчету:", , xlValues, xlWhole) If Not FoundItogo Is Nothing Then .Range("A4:G" & FoundItogo.Row).Copy Cells(iLastRow, 1) Else MsgBox "Не найдена строка 'Итого по ресурсному расчету:' на листе " & Sht.Name End If