Добрый вечер! Имеем: 150 однотипных по структуре файлов (книг) по 4 кб, в каждом файле один заполненный лист, подписанный допустим "ABCDE-auto", остальные пустые Необходимо: 150 книг слить в одну книгу на один лист
спасибо, только что посмотрел, сижу впитываю) лучше бы готовый макрос канеш, часто приходится одинаковые таблицы слепливать, просто в этот раз их дохрена и времени нет - очень срочно
Вот вам макрос (+ файл ниже). Собирает листы из разных файлов в один файл (в одну книгу)
Код
Sub CombineWorkbooks()
Dim FilesToOpen, wbImportFrom As Workbook, iFile As Long, counter As Long, SheetCopyName As String
If MsgBox("Собрать листы 'ABCDE-auto' из файлов?", vbQuestion + vbYesNo, "Вопрос") = vbNo Then Exit Sub
'вызываем диалог выбора файлов откуда будем брать данные
FilesToOpen = Application.GetOpenFilename(FileFilter:="All files (*.*), *.*", MultiSelect:=True, Title:="Укажите файлы")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбрано ни одного файла!", vbExclamation, "Внимание"
Exit Sub
End If
SheetCopyName = "ABCDE-auto" 'название листа, которое будем собриать
counter = 0 'счётчик обработанных файлов
Application.ScreenUpdating = False 'отключение обновления экрана
'проходим по всем выбранным файлам
For iFile = 1 To UBound(FilesToOpen)
'если в список попал общий файл, то пропускаем его
If FilesToOpen(iFile) <> ThisWorkbook.FullName Then
Set wbImportFrom = Workbooks.Open(Filename:=FilesToOpen(iFile), ReadOnly:=True)
'проверяем на наличие листа ABCDE-auto в файле
If SheetExist(wbImportFrom.Name, SheetCopyName) Then
counter = counter + 1 'увеличиваем счётчик на 1
'копируем лист в общий файл
wbImportFrom.Worksheets(SheetCopyName).Copy ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
End If
'закрываем очередной файл и переходим к другому файлу
wbImportFrom.Close savechanges:=False
End If
Next iFile
Application.ScreenUpdating = True
MsgBox "Данные из " & counter & " файлов собраны!", vbInformation, "Конец"
End Sub
Function SheetExist(WB As String, iSheetName As String) As Boolean
On Error Resume Next
With Workbooks(WB).Worksheets(iSheetName): End With
SheetExist = (Err = 0)
Err.Clear
On Error GoTo 0
End Function
gvalexey написал: ABCDE-auto на самом деле фантазийное название..
хм... а как вы считаете - Макрос открывает файл, там, например, 10 листов и он будет брать название нужного листа из вашей головы? Как вы указали название листа в вашем первом сообщение, так я макрос и написал. Откройте мой файл, нажмите Alt+F11 - откроется редактор VBE кода и вы увидите текст макроса. Найдите глазами в коде строку, где указано имя листа и измените его на нужное.
Чтобы собрать один лист из кучи файлов на 1 общий лист надо знать структуру этого листа. Что там находится на ваших листах? Таблица? В каких ячейках? Надо поставить эту таблицу со всех файлов одну таблицу под другой? Или вправо? Например, если таблица находится всегда в столбцах А:D и её нужно собрать в столбик одну под одной со всех файл - так будет понятее p.s. помню уже писал макрос как-то здесь на форуме, там человеку нужно было со всех файлов собрать один столбец на общий лист (например, собрать со всех файлов лист D в один общий лист)
во вложениях обрз1 обрз2 обрз3 это три файла-исходника, нужно объединить в "должно получиться", отмечу, что в исходниках кол-во строк м.б. разным, 3, 5, ну до 10
gvalexey написал: Необходимо: 150 книг слить в одну книгу на один лист
New, когда человек пишет так и больше ни слова не пишет о структуре этих данных - есть над каждой таблицей шапка или нет, если есть то сколько строк занимает на какой лист собрать данные? на новый, на текущий, на последний? если данные записывать на существующий лист, данные дописывать за существующими, удалить все существующие? это информация без которой НЕЛЬЗЯ написать корректный макрос. Нельзя написать корректный макрос - зачем его вообще писать? поэтому уверенно прохожу мимо таких тем, руководствуясь простым принципом: нет задачи - не может быть решения!
Ігор Гончаренко написал: поэтому уверенно прохожу мимо таких тем, руководствуясь простым принципом:нет задачи - не может быть решения!
мимо же не прошли, свои 3 копейки вставили возможно Вам когда-нибудь придется обратиться на форум по вопросам, в которых Вы мало/плохо разбираетесь, а я профессионал. Как специалист совершенно в другой области так же подвергну Вас обструкции и легкому глуму Добрее надо быть Игорь, добрее)