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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 22:33   #1
fcunited
 
Регистрация: 07.06.2010
Сообщений: 4
По умолчанию Скопировать данные из некоторых ячеек одной книги в другие книги

Здраствуйте, в VB я не разбираюсь, программирую на PHP, но знакомый попросил решить такую простенькую для тех, кто шарит в VB, задачу:

В папке есть Х книг с разными именами (если надо, я могу переименовать их в 1.xls, 2.xls и т.д.), в этой же папке есть файл 0.xls, будем называть его мастер-книгой. Книги содержат много листов и структура всех книг абсолютно одинаковая.

Нужно, запустив макрос из мастер-книги, пробежаться по всем остальным файлам в папке и скопировать из мастер-книги в остальные некоторые ячейки с некоторых листов.

Т.е., чтобы в начале макроса я мог сам указать какие ячейки копировать. В формате массива, содержащего подобные элементы: имя_листа->ячейка или номер_листа->ячейка.

В общем, алгоритм на псевдоязыке где-то такой:

PHP код:
// входящий массив ячеек, которые надо скопировать
$cells=array(
 
0=>array(0"A4"), // сначала номер листа, потом ячейка
 
1=>array(1"B4"), 
 
2=>array(1"C8"),
 
3=>array(2"M14"),
);

$master_book=fopen("0.xls");

$child_books=array();
$i=1;
while (
file_exists($i+".xls"))
{
 
$child_books[]=fopen($i+".xls");
 
$i++;
}

foreach (
$child_books as $c)
{
 
copy($master_book$c$cells);
 
// параметры: book_from, book_where, cells_array

Спасибо за помощь!

Последний раз редактировалось fcunited; 07.06.2010 в 22:37.
fcunited вне форума Ответить с цитированием
Старый 08.06.2010, 18:44   #2
fcunited
 
Регистрация: 07.06.2010
Сообщений: 4
По умолчанию

Anyone????
fcunited вне форума Ответить с цитированием
Старый 08.06.2010, 23:45   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я думаю, тут проблема в том, как заполнить массив ячеек для копирования. Т.к. сам механизм копирования работает:
Код:
Sub tt()
ReDim Ar(0, 1)
Ar(0, 0) = "1"
Ar(0, 1) = "A1"
Sheets(Val(Ar(0, 0))).Range(Ar(0, 1)).Copy [a2]
End Sub
Массив можно делать и одномерный, брать пары ячеек.
Т.е. если есть массив, скопировать не проблема. Но вот каким механизмом заполнить массив? Не выдавать же кучу инпутбоксов?
Брать данные с листа тоже не очень хорошо. Одновременное выделение по нескольким листам не работает... Я пока не вижу, как это удобно сделать.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2010, 07:04   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Hugo121 абсолютно прав. Посмотрите один из возможных вариантов во вложении. Откройте файл "0.xls" и нажмите кнопку. В появившейся форме нужно выбрать файлы, в которые будем копировать (допустим множественный выбор) и указать номера листов и диапазоны для каждого листа. Например, если выбрать "Книга2.xls" и "Книга4.xls", номера листов - 1, 3 и диапазоны - A1 A5, A8 A10:B20, то будет произведено копирование данных из книги "0.xls" в выбранные книги, листы, диапазоны. Макраос не проверяет правильность заполнения формы (если нужно - добавьте самостоятельно), поэтому, будьте внимательны. Адреса ячеек (диапазонов) в пределах листа разделять пробелом. Адреса ячеек (диапазонов) для следующего листа отделять запятой.
Вложения
Тип файла: rar Primer.rar (20.4 Кб, 79 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.06.2010, 10:48   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Хорошо написанный код, сделана работа, но мне например такой механизм не нравится - надо помнить адреса не только на текущем листе, но и на других, всё это вручную занести в форму...
Может лучше так - на каждом листе кнопка макроса. Открываем лист, выделяем все нужные ячейки листа, жмём кнопку - они копируются. Открываем следующий лист - аналогично и т.д. Но вот как выбрать нужные файлы - опять непонятно. И выполняться будет дольше, чем сразу всё копировать, но вроде как удобнее. Если надо копировать во все файлы папки без индивидуального выбора - я бы сделал так.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2010, 11:05   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Может лучше так...
Может и лучше. Может быть вообще не требуется ничего выделять. Может все данные (листы, диапазоны) уже где-то содержатся. Автор-то молчит...
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.06.2010, 11:26   #7
fcunited
 
Регистрация: 07.06.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Может и лучше. Может быть вообще не требуется ничего выделять. Может все данные (листы, диапазоны) уже где-то содержатся. Автор-то молчит...
Не содержатся, но полей/диапазонов не так много, думаю, можно повыделять.

Более того, в будущем, через несколько дней мне придут Ексель-файлы другой структуры, в которых надо будет снова из мастер-книги скопировать в n книг какие-то ячейки.

ПС: сейчас проверю код, который Вы выложили. Спасибо за помощь!
fcunited вне форума Ответить с цитированием
Старый 09.06.2010, 12:03   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну повыделять-то пока некуда, я такой код сейчас писать не буду, некогда. Да и с файлами пока непонятно, когда и где их выбирать...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2010, 12:14   #9
fcunited
 
Регистрация: 07.06.2010
Сообщений: 4
По умолчанию

UPD: попробовал, работает просто блестяще!!! Огромное спасибо!
fcunited вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка ячеек из одной книги excel в другую hackPNZ Microsoft Office Excel 7 17.10.2014 17:27
Скопировать диапазон с одной книги в другую, если совпадают назавание листов m_v_v Microsoft Office Excel 7 06.04.2010 13:15
Автоматическое заполнение ячеек разных листов одной книги tissot Microsoft Office Excel 2 26.01.2010 21:24
как из одного одной книги экспортировать данные на другой лист mabru Microsoft Office Excel 11 07.01.2009 10:20
Ссылки на другие книги Un1kum Microsoft Office Excel 1 10.07.2008 05:12