Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 10:21   #1
Dunaevba
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 3
Печаль Сбор информации из нескольких книг в одну

Добрый день!
В компании решили ввести отчетность деятельности отделов.
Формирование отчета проходит ежемесячно по заранее набранной ворме в Excel 2010.
Книга которая должна собирать из этих отчетов информацию находится в этой же папке.
Задача следующая: макросом открыть все отчеты, которые лежат в этой же папке (количество отчетов может меняться). и последовательно перенести информацию в сводный отчет. Т.е. каждая новая таблица встаёт под только что вставленную. Форматы всех таблиц одинаковые.Начинаются все с ячейки A12. таблица на 7 столбцов. После того, как процедура вставки информации завершена, закрыть отчеты без сохранения. Остаться в сводном отчете.
Как лошара я накидал вот такой макрос:
Sub Загрузка_отчетов_отделов()
Application.ScreenUpdating = False 'обновление экрана выключено, что бы не моргало
'очистка формы перед копированием
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Delete


'открываем отчеты отделов
Workbooks.Open Filename:="Отчет Бухгалтерии.xlsx"
Workbooks.Open Filename:="Отчет Кадров.xlsx"
Workbooks.Open Filename:="Отчет Казначейства.xlsx"
Workbooks.Open Filename:="Отчет Строителей.xlsx"
Workbooks.Open Filename:="Отчет Экономистов.xlsx"
Workbooks.Open Filename:="Отчет Юристов.xlsx"

'из отчета Бухгалтерии вносим информацию
Windows("Отчет Бухгалтерии.xlsx").Activate
On Error Resume Next
ActiveSheet.ShowAllData
'LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
ActiveSheet.ShowAllData
Range("A12").Select
ActiveSheet.Paste

'из отчета Кадров вносим информацию
Windows("Отчет Кадров.xlsx").Activate
ActiveSheet.ShowAllData
'LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
'Range("A72").Select
ActiveSheet.Range("a12").End(xlDown ).Offset(1, 0).Select 'выбираем последнюю пустую ячейку
ActiveSheet.Paste

'из отчета Казначейства вносим информацию
Windows("Отчет Казначейства.xlsx").Activate
ActiveSheet.ShowAllData
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
'Range("A32").Select
ActiveSheet.Range("a12").End(xlDown ).Offset(1, 0).Select 'выбираем последнюю пустую ячейку
ActiveSheet.Paste

'из отчета Строителей вносим информацию
Windows("Отчет Строителей.xlsx").Activate
ActiveSheet.ShowAllData
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
'Range("A42").Select
ActiveSheet.Range("a12").End(xlDown ).Offset(1, 0).Select 'выбираем последнюю пустую ячейку
ActiveSheet.Paste

'из отчета Экономистов вносим информацию
Windows("Отчет Экономистов.xlsx").Activate
ActiveSheet.ShowAllData
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
'Range("A52").Select
ActiveSheet.Range("a12").End(xlDown ).Offset(1, 0).Select 'выбираем последнюю пустую ячейку
ActiveSheet.Paste

'из отчета Юристов вносим информацию
Windows("Отчет Юристов.xlsx").Activate
ActiveSheet.ShowAllData
'Range("A12:H21").Select
ActiveSheet.Range("a12", ActiveSheet.Range("h12").End(xlDown )).Select 'выбираем заполненный диапазон
Selection.Copy
Windows("ОТЧЕТ УК ТАВРОС.xlsm").Activate
'Range("A62").Select
ActiveSheet.Range("a12").End(xlDown ).Offset(1, 0).Select 'выбираем последнюю пустую ячейку
ActiveSheet.Paste

'закрытие отчетов отделов
Windows("Отчет Юристов.xlsx").Activate
ActiveWindow.Close
Windows("Отчет Экономистов.xlsx").Activate
ActiveWindow.Close
Windows("Отчет Строителей.xlsx").Activate
ActiveWindow.Close
Windows("Отчет Казначейства.xlsx").Activate
ActiveWindow.Close
Windows("Отчет Кадров.xlsx").Activate
ActiveWindow.Close
Windows("Отчет Бухгалтерии.xlsx").Activate
ActiveWindow.Close

Application.ScreenUpdating = True 'обновление экрана включено
End Sub

Понимаю, что тут можно обойтись циклом. Но с этим я не знаком
+ ко всему не знаю как сделать что бы открывались все фаилы в текущей папке учитывая, что имена и количество всегда может быть разное.
Dunaevba вне форума Ответить с цитированием
Старый 21.03.2013, 10:23   #2
Dunaevba
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 3
По умолчанию

Помогите пожалуйста....
Dunaevba вне форума Ответить с цитированием
Старый 21.03.2013, 10:41   #3
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

конечно сложно советовать, не видя примера таблицы

sub form00()
s1="c:\rab\"
s2=dir(s1 & "*.xlsx"
do while len(s2)>0
'''формирование рабочих строк 1-7 кол
'''в колонке 8 --имя книги

s2=dir
loop

end sub

а далее обычная сводная на эту рабочую книгу
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 21.03.2013, 10:52   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Есть готовое решение для сбора данных из файлов:
http://excelvba.ru/code/CombineFiles
(там есть прикреплённый файл со всем необходимым кодом)
EducatedFool вне форума Ответить с цитированием
Старый 21.03.2013, 10:57   #5
Dunaevba
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Есть готовое решение для сбора данных из файлов:
http://excelvba.ru/code/CombineFiles
(там есть прикреплённый файл со всем необходимым кодом)
Спасибо! Посмотрю
Надеюсь чайник разберется ))))
Dunaevba вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сбор данных из нескольких книг Excel в одну! hna79 Microsoft Office Excel 2 28.10.2012 14:30
сбор данных с разных книг в одну Ledy1987 Microsoft Office Excel 26 20.04.2011 21:33
Сбор даных с разных книг в одну Pao Microsoft Office Excel 28 12.07.2010 07:27
Сбор данных с множества книг в одну по шаблонам Adeletto Microsoft Office Excel 3 11.06.2010 17:07
Сбор данных из разных книг 804040 Microsoft Office Excel 2 19.04.2010 15:33