![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]()
Добрый день!
Помогите, пожалуйста, решить одну задачу. Задание1: Имеется: - отчеты филиалов - сводный отчет Необходимо: Сделать макрос по созданию сводного отчета из отчетов филиалов при этом исходные отчеты филиалов должны оставаться без изменений Направьте, пожалуйста, в нужное русло, если не сможете помочь. ![]() |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]()
Я подозреваю, что алгоритм решения достаточно прост:
1. Создание кнопки загрузки операции на свободном листе файла "Сводный отчет.xls" 2. Копирование данных из трех файлов (Отчет филиала1, Отчет филиала2, Отчет филиала3) в соответствующие вкладки в файле "Сводный отчет.xls" 3. Суммирование данных из этих вкладок на листе "Свод" файла "Сводный отчет.xls" Я знаю как это сделать ручками, но нужен именно макрос. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]()
Нажал на запись макросов, выдал следующую запись. Все рассчитывает, но только при открытых трех вспомогательных файлов. Только я их закрываю, макрос выдает ошибку. Думаю все дело, наверное, в прописании пути, да? Но я путь прописал и все равно выдает ошибку. В чем дело? Остальные пути пока прописывать не стал. Что за команда Windows?
Самая первая строка (подчеркнута). Что неправильно? Windows("F:\Задание\Задание 1. Сводный отчет\Отчет филиала 1.xls").Activate Columns("A:G").Select Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал1").Select Range("A1").Select ActiveSheet.Paste Windows("Отчет филиала 2.xls").Activate Columns("A:G").Select Application.CutCopyMode = False Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал2").Select Range("A1").Select ActiveSheet.Paste Windows("Отчет филиала 3.xls").Activate Columns("A:G").Select Application.CutCopyMode = False Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал3").Select Range("A1").Select ActiveSheet.Paste Sheets("Свод").Select Range("B5").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=SUM(Филиал1!RC,Филиал2!RC,Филиал3 !RC)" Range("B5").Select Selection.AutoFill Destination:=Range("B5:G5"), Type:=xlFillDefault Range("B5:G5").Select Selection.AutoFill Destination:=Range("B5:G7"), Type:=xlFillDefault Range("B5:G7").Select End Sub |
![]() |
![]() |
![]() |
#4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
Windows("F:\Задание\Задание 1. Сводный отчет\Отчет филиала 1.xls").Activate
команда в этой строке Activate. Точнее - это не команда, а метод обьекта Windows. Windows в данном контексте это колеекция открытых Экеселм окон. Windows("F:\Задание\Задание 1. Сводный отчет\Отчет филиала 1.xls") или например Windows(1) - это обращение к конкретному элементу коллекции.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 254
|
![]()
Относительные пути файлов филиалов остаются постоянными (например: в одной папке со сводным) или их каждый раз указывает пользователь? После этого можно писать макрос, который поочередно открывает файлы филиалов и делает все что вы описали. (лучше обратитесь за помощью, получите готовый код, посмотрите...)
помогать студентам - моя вторая профессия
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Немного непонятна задача в целом.
1. Если нужно получить только сумму по всем файлам - то копировать данные незачем, можно в цикле открыть файлы, взять данные, собрать в массиве, закрыть файлы. 2. Если нужно получить так, как в примере, то можно так: а) прописать заранее в первом (из трех - сводный, Лист1 и Лист100) листе формулы вида =СУММ(Лист1:Лист100!B5) б) скопировать листы источника целиком (переименовывая), вставляя перед последним листом. Это если вид всех листов одинаков. Тогда количество филиалов практически неограничено (имена Лист1 и Лист100 условны, они могут быть любые), для них не нужно заранее заготавливать листы и отслеживать, в какой лист что копируется. Лист1 и Лист100 можно сделать скрытыми, чтоб глаза не мозолили и руки не чесали ![]()
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 16.04.2011 в 18:56. |
![]() |
![]() |
![]() |
#7 | |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]() Цитата:
![]() Прописал это, как: Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\111.xls" Set wb = ActiveWorkbook Почему-то сам файл "Сводный отчет" операция открывать отказывается, видимо, из-за того, что макрос запускаешь уже из этого файла и он уже открытый, поэтому на первых порах создал файл 111.xls, в котором проводятся все необходимые операции. Полный код получился такой: Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\111.xls" Set wb = ActiveWorkbook Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 1.xls" Range("B5:E7").Select Selection.Copy Windows("111.xls").Activate Sheets("Лист1").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 1.xls").Activate ActiveWindow.Close Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 2.xls" Range("B5:E7").Select Selection.Copy Windows("111.xls").Activate Sheets("Лист2").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 2.xls").Activate ActiveWindow.Close Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 3.xls" Range("B5:E7").Select Selection.Copy Windows("111.xls").Activate Sheets("Лист3").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 3.xls").Activate ActiveWindow.Close Windows("111.xls").Activate Range("B5").Select ActiveCell.FormulaR1C1 = "=SUM(Лист1!RC,Лист2!RC,Лист3!R C)" End Sub Все делает как нужно, но мне нужно, чтобы он это делал в файле "Сводный отчет", а не в 111. Что делать не знаю! |
|
![]() |
![]() |
![]() |
#8 | |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#9 | |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]() Цитата:
Как теперь кнопку запуска операции прописать и как сделать так, чтобы все операции проводились в файле "Сводный отчет"? Вот теперь моя главная задача. Сдаваться завтра, а у меня ни фига не готово. ![]() |
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 16.04.2011
Сообщений: 9
|
![]()
Решение было простым. Просто убрал первую строку и сделал активным получается уже открытый файл "Сводный отчет"
![]() Все теперь считает все правильно. Осталось кнопку присоединить. ![]() Код получился такой: Set wb = ActiveWorkbook Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 1.xls" Range("B5:E7").Select Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал1").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 1.xls").Activate ActiveWindow.Close Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 2.xls" Range("B5:E7").Select Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал2").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 2.xls").Activate ActiveWindow.Close Workbooks.Open Filename:="F:\Задание\Задание 1. Сводный отчет\Отчет филиала 3.xls" Range("B5:E7").Select Selection.Copy Windows("Сводный отчет.xls").Activate Sheets("Филиал3").Select Range("B5").Select ActiveSheet.Paste Windows("Отчет филиала 3.xls").Activate ActiveWindow.Close Windows("Сводный отчет.xls").Activate Sheets("Свод").Select Range("B5").Select ActiveCell.FormulaR1C1 = "=SUM(Филиал1!RC,Филиал2!RC,Филиал3 !RC)" Selection.AutoFill Destination:=Range("B5:E5"), Type:=xlFillDefault Range("B5:E5").Select Selection.AutoFill Destination:=Range("B5:E7"), Type:=xlFillDefault Range("B5:E7").Select End Sub |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание отчета | Ol_Bak | Microsoft Office Access | 1 | 25.01.2011 13:43 |
Создание отчета | -=pasha=- | Компоненты Delphi | 5 | 20.01.2011 07:44 |
Создание сводного отчета | Гошик | Microsoft Office Excel | 1 | 30.07.2010 22:52 |
Создание отчета | Deni55 | Microsoft Office Excel | 13 | 15.06.2009 14:53 |