Добрый день. Есть Новая папка по пути C:\Новая папка и в ней расположено несколько различных книг .xlsx. Книги имеют по два листа. Имя первого листа меняется, имя второго Приложение 1 неизменно во всех книгах. Помогите, пожалуйста, с кодом копирующим и вставляющим построчно значения как "вставить123" в открытую книгу: 11ую и 18ую строку первого листа каждой книги из Новой папки; 8ую и последующие непустые строки по столбцу A второго листа каждой книги из Новой папки (если 9ая строка пустая, то копируем только 8ую).
Например: в книгу 00 вставляю строки из книг 11 и 22
Добрый день. Есть Новая папка по пути C:\Новая папка и в ней расположено несколько различных книг .xlsx. Книги имеют по два листа. Имя первого листа меняется, имя второго Приложение 1 неизменно во всех книгах. Помогите, пожалуйста, с кодом копирующим и вставляющим построчно значения как "вставить123" в открытую книгу: 11ую и 18ую строку первого листа каждой книги из Новой папки; 8ую и последующие непустые строки по столбцу A второго листа каждой книги из Новой папки (если 9ая строка пустая, то копируем только 8ую).
Например: в книгу 00 вставляю строки из книг 11 и 22timo64uk
timo64uk, Доброго времени суток. Нечто подобное решали на другом ресурсе (если надо будет ссылку дам). Но как-то тяжко я вас понял, и то не уверен что я вас понял правильно. Вот вам вариант:[vba]
Код
Option Explicit
Sub Merge() Dim i As Long, j As Long Dim FileNames() As String Dim ws As Worksheet
Dim Merged As Workbook Set Merged = ThisWorkbook
Dim iFolderPath As String iFolderPath = "C:\Новая папка" ' Замените на ваш путь к файлам
Dim FilePath As String FilePath = Dir(iFolderPath & "\*.xlsx")
Dim FileCount As Long FileCount = 0
Dim RowCnt As Long RowCnt = 1
' Подсчет и сохранение путей к файлам Do While FilePath <> "" FileCount = FileCount + 1 ReDim Preserve FileNames(1 To FileCount) FileNames(FileCount) = iFolderPath & "\" & FilePath FilePath = Dir Loop
If FileCount < 1 Then MsgBox "No files found in the specified directory!", vbCritical Exit Sub End If
With Application .DisplayAlerts = False .ScreenUpdating = False End With
For i = LBound(FileNames) To UBound(FileNames)
Dim wb As Workbook Set wb = Workbooks.Open(FileNames(i), UpdateLinks:=False)
For Each ws In wb.Worksheets
If ws.Index = 1 Then
' Первая таблица: 11-я и 18-я строки If ws.FilterMode Then ws.ShowAllData Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(11).Value RowCnt = RowCnt + 1
Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера).
У меня ничего не подвисает.
timo64uk, Доброго времени суток. Нечто подобное решали на другом ресурсе (если надо будет ссылку дам). Но как-то тяжко я вас понял, и то не уверен что я вас понял правильно. Вот вам вариант:[vba]
Код
Option Explicit
Sub Merge() Dim i As Long, j As Long Dim FileNames() As String Dim ws As Worksheet
Dim Merged As Workbook Set Merged = ThisWorkbook
Dim iFolderPath As String iFolderPath = "C:\Новая папка" ' Замените на ваш путь к файлам
Dim FilePath As String FilePath = Dir(iFolderPath & "\*.xlsx")
Dim FileCount As Long FileCount = 0
Dim RowCnt As Long RowCnt = 1
' Подсчет и сохранение путей к файлам Do While FilePath <> "" FileCount = FileCount + 1 ReDim Preserve FileNames(1 To FileCount) FileNames(FileCount) = iFolderPath & "\" & FilePath FilePath = Dir Loop
If FileCount < 1 Then MsgBox "No files found in the specified directory!", vbCritical Exit Sub End If
With Application .DisplayAlerts = False .ScreenUpdating = False End With
For i = LBound(FileNames) To UBound(FileNames)
Dim wb As Workbook Set wb = Workbooks.Open(FileNames(i), UpdateLinks:=False)
For Each ws In wb.Worksheets
If ws.Index = 1 Then
' Первая таблица: 11-я и 18-я строки If ws.FilterMode Then ws.ShowAllData Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(11).Value RowCnt = RowCnt + 1
Спасибо. Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера). При последующем открытии предлагает открыть в безопасном режиме. Поочередно буду исключать строки кода.
Спасибо. Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера). При последующем открытии предлагает открыть в безопасном режиме. Поочередно буду исключать строки кода.timo64uk
похоже 00 файл составлен копированием и вставкой значений, так и сделал файл поместить в туже папку, где файлы, с которых копируется или пропишите путь макрос также подвязан к двойному клику на ячейке A1 [vba]
Код
Sub u_17() Application.ScreenUpdating = False Application.DisplayAlerts = False x = Cells(Rows.Count, "a").End(xlUp).Row Range("a1:q" & x).Clear a = ThisWorkbook.Path 'папка в который находиться файл b = Dir(a & "\*.xlsx") 'имя файла с рашрирешием xlsx Do While b <> "" c = Cells(Rows.Count, "a").End(xlUp).Row + 1 Workbooks.Open Filename:=a & "\" & b, UpdateLinks:=False Workbooks(b).Sheets(1).Range("a11:q11").Copy ThisWorkbook.Sheets(1).Range("a" & c).PasteSpecial Paste:=xlPasteValues Workbooks(b).Sheets(1).Range("a18:q18").Copy ThisWorkbook.Sheets(1).Range("a" & c + 1).PasteSpecial Paste:=xlPasteValues e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row Workbooks(b).Sheets(2).Range("a8:h" & e).Copy ThisWorkbook.Sheets(1).Range("a" & c + 2).PasteSpecial Paste:=xlPasteValues Workbooks(b).Close False b = Dir Loop Rows(1).Delete Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
[/vba]
похоже 00 файл составлен копированием и вставкой значений, так и сделал файл поместить в туже папку, где файлы, с которых копируется или пропишите путь макрос также подвязан к двойному клику на ячейке A1 [vba]
Код
Sub u_17() Application.ScreenUpdating = False Application.DisplayAlerts = False x = Cells(Rows.Count, "a").End(xlUp).Row Range("a1:q" & x).Clear a = ThisWorkbook.Path 'папка в который находиться файл b = Dir(a & "\*.xlsx") 'имя файла с рашрирешием xlsx Do While b <> "" c = Cells(Rows.Count, "a").End(xlUp).Row + 1 Workbooks.Open Filename:=a & "\" & b, UpdateLinks:=False Workbooks(b).Sheets(1).Range("a11:q11").Copy ThisWorkbook.Sheets(1).Range("a" & c).PasteSpecial Paste:=xlPasteValues Workbooks(b).Sheets(1).Range("a18:q18").Copy ThisWorkbook.Sheets(1).Range("a" & c + 1).PasteSpecial Paste:=xlPasteValues e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row Workbooks(b).Sheets(2).Range("a8:h" & e).Copy ThisWorkbook.Sheets(1).Range("a" & c + 2).PasteSpecial Paste:=xlPasteValues Workbooks(b).Close False b = Dir Loop Rows(1).Delete Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Спасибо, заработало. Но берет лишь с первого листа данные (второй лист игнорирует). И видимо что-то у офисного компа запрещено политикой безопасности и при проигрывании все эксель закрываются и открывается восстановленный файл с хорошими результатами. Тестировал на 27 файлах - работает. Пришлось политику безопасности обходить через старые файлы .xlsm, т.к. новые прячет и Alt+F8 отображает как `25_10_2024_exw_kopirovat_strok.xlsm`!Module1.Merge
Спасибо, заработало. Но берет лишь с первого листа данные (второй лист игнорирует). И видимо что-то у офисного компа запрещено политикой безопасности и при проигрывании все эксель закрываются и открывается восстановленный файл с хорошими результатами. Тестировал на 27 файлах - работает. Пришлось политику безопасности обходить через старые файлы .xlsm, т.к. новые прячет и Alt+F8 отображает как `25_10_2024_exw_kopirovat_strok.xlsm`!Module1.Merge
Пробовал код из похожей темы с форума - в "ребут" эксель также уходит. Отрабатывает хорошо, но там и немного иная задача - все листы в один новый файл. В принципе ребут не страшен. просто изначально он воспринимался как некая ошибка кода, а оказалось все в норме.
Пробовал код из похожей темы с форума - в "ребут" эксель также уходит. Отрабатывает хорошо, но там и немного иная задача - все листы в один новый файл. В принципе ребут не страшен. просто изначально он воспринимался как некая ошибка кода, а оказалось все в норме.timo64uk
Сообщение отредактировал timo64uk - Суббота, 26.10.2024, 05:35
[offtop]М-да, говорил я себе, не стоит этому человеку помогать. Судя по его предыдущим темам. Всё не Слава Богу с ним. Что-ж, будет мне уроком. Лучше мне мимо пройти тем этого пользователя. [/offtop]
[offtop]М-да, говорил я себе, не стоит этому человеку помогать. Судя по его предыдущим темам. Всё не Слава Богу с ним. Что-ж, будет мне уроком. Лучше мне мимо пройти тем этого пользователя. [/offtop]MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Суббота, 26.10.2024, 11:02