5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
|
1 | |
Копирование диапазона из двух книг в одну (несколько листов)08.05.2013, 01:38. Показов 4170. Ответов 10
Метки нет (Все метки)
Здравствуйте. Хочу попросить помощи в решении одной задачи в Excel 2010. Пытаюсь создать макрос, который бы подтягивал в книгу "ФКС" диапазон данных из книг "Продажи1" и "Продажи2". Они в момент обращения к ней открыты. Затык для меня в двух местах.
1. В книгах-источниках 6 листов (с названиями месяцев), с которых нужно подтянуть данные, точно такие же листы и в книге, куда нужно поместить данные. Причём с каждого листа двух книг поместить строки друг под другом на один лист результирующей книги (под шапку, которая занимает первую строку и неизменна). Я пока смог только добиться копирования строк из одного файла и с одного листа, и я не понимаю, как это сделать для остальных листов. 2. Диапазон для копирования может содержать разное количество строк. То есть в одной книге их может быть 5, в другой 20. Вижу, что описание задачи сумбурное, поэтому в приложенных книгах я поместил примечания. Также постарался нарисовать картинку по вышеописанным условиям.
0
|
08.05.2013, 01:38 | |
Ответы с готовыми решениями:
10
Копирование диапазона из двух книг в одну с условиями Копирование диапазона из двух книг в одну с двумя условиями Копирование из нескольких книг в одну Копирование строк из нескольких книг в одну |
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
08.05.2013, 11:24 | 2 | |||||
Все книги должны быть открыты - лениво диалог открытия прописывать...
0
|
5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
|||||||||||
10.05.2013, 13:53 [ТС] | 3 | ||||||||||
Спасибо за быстрый ответ! Код работает прекрасно, особенно учитывая моё описание задачи Если не лень, не могли бы вы помочь доработать его с тем учётом, что файлы находятся в разных папках (ФКС на одном компе, Продажи1 и Продажи2 на других). Я попробовал внести модификацию в ваш код, использовав вместо
Set wb1 = Workbooks.Open("_path_Продажи1.xlsx") вместо _path_ указав путь к файлу. Результат есть, однако при этом файлы "Продажи1" и "Продажи2" открываются у меня локально, хотя это не нужно, а нужно только взять из них данные. Я не совсем точно выразился, что они открыты, имел в виду, что они открыты, но на других компах. И ещё, пытался сделать очистку диапазона, куда будут вставляться данные, с помощью
Добавлено через 38 минут и очистка делается только на одном листе, имя которого указано вместо MySheet
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
10.05.2013, 14:25 | 4 | |||||
Не понял, чем открытие не нравится? Открыли, взяли данные, закрыли.
Если не делать application.screenupdating, то и не заметите (ещё на это время отключить ShowWindowsInTaskbar, чтоб уж совсем...) Или вместо Workbooks.Open попробуйте getobject, только в конце обязательно закройте файл! А то так и останется висеть, пока Эксель не закроете. Ещё можно данные брать с помощью ADO, но я в нём не очень... Ну а очистка так:
1
|
5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
|
11.05.2013, 00:23 [ТС] | 5 |
Hugo121, внёс добавления согласно вашим указаниям. Заюзал и Application.ScreenUpdating=false, и Application.ShowWibdowsInTaskbar=false. И очистку добавил. Статическую, но рад и этому. Насчёт динамического определения диапазона для очистки, конечно, идея отличная, но пока метод тыка, совмещённый с гуглом, не сработал.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
11.05.2013, 00:31 | 6 | |||||
Так вот же:
0
|
5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
||||||
11.05.2013, 00:34 [ТС] | 7 | |||||
А, добавил же ещё закрытие (стр. 8, 29-31)
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
11.05.2013, 15:58 | 8 | |||||
Чуть проще:
Да и мало ли какие книги перед этой работой открыл пользователь и не закрыл...
0
|
5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
||||||
11.05.2013, 21:48 [ТС] | 9 | |||||
Спасибо, я как-то не подумал, что он же все файлы без сохранения закроет. А правильно ли я понимаю, что теоретически, продублировав фрагмент с соответствующим изменением номера (wb#)и объявив wb# заранее
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
11.05.2013, 22:03 | 10 |
Он и так берёт из любого количества листов. Но из двух указанных книг.
Если количество книг может быть любым - можно подключить диалог выбора книг, и затем перебирать полученный массив имён - сперва все открыли, затем из всех копируем. Ну там может быть несколько вариантов решения - например можно создать коллекцию объектов, или собрать их в словарь. Но если книг мало, и они всегда известны - тогда проще продублировать этот блок несколько раз (копипаст рулит )
1
|
5 / 4 / 1
Регистрация: 08.05.2013
Сообщений: 14
|
|
12.05.2013, 12:59 [ТС] | 11 |
0
|
12.05.2013, 12:59 | |
12.05.2013, 12:59 | |
Помогаю со студенческими работами здесь
11
Копирование данных из одинаковых ячеек разных листов в одну таблицу Различная выборка из диапазона столбца нескольких значений разного множества листов и копирование в сводные таблицы Объединить несколько книг Excel в одну Копирование данных с определённого массива с несколько листов в один Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |