Здравствуйте ув. "ЭКСЕЛеводы" и эксперты в делах формул и макросов!
Прошу помощи в решении задачи сбора данных с книг: таких книг более 100! в каждой куча информации на первом листе - Лист1- требуется собрать воедино в отдельной книге данные со всех книг, с возможность обновления данных в исходниках и разумеется автоматических обновлением в собранном файле. Таблицы одинаковые, разница только в количестве заполненных строк. пример по ссылке не подходит, в силу сбора данных по разным листам, вызывает ошибки сбора информации и тд.. работать с этим файлом будет женщина! и нужно упростить до "включения чайника" кнопка "ТЫК" (обновить)
Насколько мне известно, в сферах соцзащиты, образования, дошкольного и доп. образования существует специальное программное обеспечение для подобных целей (АИС и т.п). Перенесите свои данные туда, и не нужно будет сводных таблиц, и для отчетности всем удобней - и Вам, и проверяющим. Или у Вас собственная база данных на детей и родителей с Вашими собственными критериями - отдельными от ФГОС и прочих требований к образовательным учреждениям? Отвечать на эти вопросы не обязательно, если найдутся желающие Вам помочь - помогут.
Не понятно, зачем нужна форма с вводом пароля? В поиске наберите "собрать данные с нескольких книг". Таких собиралочек море. Все книги помещаете в один каталог и поочередно просматриваете их все с помощью Dir и переносите данные в свою книгу.
пароль - на защиту всех листов одним кликом, это от любопытных женских глаз, т.к. им не объяснить что формулы и массивы тут для того что бы все работало, а они могут взять и начать вставлять данные просто тупо в те ячейки какие видят, а не куда требуется!
на счет собиралочек - закопался совсем.. с макросами я туговат, да и с формулами не очень, что смог адаптировал,(кстати и про пароль с вашего сайта)
пример по ссылке не подходит, в силу сбора данных по разным листам, вызывает ошибки сбора информации и тд.. работать с этим файлом будет женщина! и нужно упростить до "включения чайника" кнопка "ТЫК" (обновить)
а есть возможность работать этому макросу по заданной области? т.е. у меня диапазон один и тот же B11:P160, почистить пустые строки я потом смогу другим макросом.
Код
Sub CollectAllClients()
Dim BazaWb As Workbook 'текущая книга (общий файл)
Dim BazaSht As Worksheet 'лист База покупателей в общем файле
Dim iTempFileName As String 'имя по-очерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце A
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле в столбце A
Dim iNumFiles As Long 'количество открываемых файлов
With Application 'операции с приложением/отключаем для повышения скорости работы макроса
.ScreenUpdating = False 'обновление экрана
.DisplayAlerts = False 'выод системных сообщений
.Calculation = xlManual 'автопересчет формул
'присваиваем значения нашим переменным
Set BazaWb = ThisWorkbook
Set BazaSht = BazaWb.Sheets("алфавит")
iPath = BazaWb.Path & "\"
iTempFileName = Dir(iPath & "*.xlsm")
Do While iTempFileName <> "" 'запускае цикл перебора файдов в папке
If iTempFileName <> BazaWb.Name Then 'если имя файла не равно общему открываем
With .Workbooks.Open _
(Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
iNumFiles = iNumFiles + 1
'Рабочая книга не должна быть защищена паролем
With .Worksheets("Алфавит") 'с конкретным листом в открытой книге
'номер последней заполенной строки
iLastRowTempWb = .Cells(Rows.Count, 1).End(xlUp).Row
'последняя строка в итоговом файле на листе
iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 1
'копируем диапазон с открытой книги в заданный лист
.Range(.Cells(2, 1), .Cells(iLastRowTempWb, 27)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)
End With
.Close saveChanges:=False
End With
End If
iTempFileName = Dir 'следующий файл
Loop
'включаем что отключили
.Calculation = xlAutomatic
.DisplayAlerts = True
.ScreenUpdating = True
End With
MsgBox "Информация собрана из " & iNumFiles & " файлов!", vbInformation, "Конец"
End Sub
я подпилил его под свои нужды.. вроде работает, но тащит много не нужного.. помогите избавиться пожалуйста!!
Kuzmich, !! спасибо огромное! я сделал то, от чего теперь мои коллеги получат удовольствие в работе, а ведь рутиной заниматься самое сложное! с Вашей помощью вы заставили меня кое чему научиться! и это приятно! я не программист, я преподаю музыку, но уже появились мысли что надо кое что еще доделать в моих алфавитках! надеюсь и рассчитываю на Вашу поддержку!
а еще один вопрос по ходу работы - как вставить данные не с 2 строки, а с 10 ?? сам нашел iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 10 ?? верно??