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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2010, 10:15   #1
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию Сохранение диапозонна с данными в другую книку

Здравствуйте Уважаемые Знатоки
Вопрос заключается в следующем:
Есть документ экселя(прикрепил образец, но в моем доке много листов), необходима помощь с макрасом. При нажатии на кнопку должно происходить следующее действие:
диапазон книги userformats А1:D16 должен копироваться в директорию /Arhive/БД.xls, в БД(несколько листов "года") должен с начало произвести поиск по листам в зависимости от того каким годом подписан лист (год должен определяться с userformats--А8), затем в книге БД в столбце D производиться поиск первой пустой ячейки и копироваться туда диапазон с книги userformats А1:D16. Но и это еще не все, в книге userformats уже есть кнопка сохранения, правда сохранения листов в отдельные книги в зависимости от года и месяца. Желательно чтобы принцип сохранения был такой же как в уже существующем сохранении, то есть само выбирало директорию в зависимости от того где лежит книга userformats (принцип сохранения пожалуйста посмотрите в книге userformats) и последнее оба сохранения нужно чтобы запускались с одной кнопки, с начало производилось сохранение в БД, а затем уже существующее сохранение.
Надеюсь нечего не забыл
Заранее большущие человеческое СПАСИБО.
С Ув. Staniiislav
Вложения
Тип файла: rar Эксперемент.rar (15.0 Кб, 13 просмотров)
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 08.11.2010, 13:32   #2
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

можно сделать так, см. вложение
Вложения
Тип файла: zip -2-new.zip (31.0 Кб, 21 просмотров)

Последний раз редактировалось EugeneS; 08.11.2010 в 13:39.
EugeneS вне форума Ответить с цитированием
Старый 08.11.2010, 15:12   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
Радость

Спасибо огромное!!! Это превосходно! Делает почти то что надо! Единственное, можно так сделать чтобы не было привязки к листу "Пользовательские форматы", ну чтобы я мог пользоваться этим сохранением с разных листов, допустим и с "Пользовательские форматы 222", а сохраняло все также и в туже книгу "БД"
И не хотелось бы наглеть, ну если возможно подскажите пожалуйста, можно еще чтобы делась проверка на совпадения дат из книги userformats --- А8, с книгой БД в столбце С, и если есть совпадения, спрашивало заменить заменить диапазон А1:D16 соответствующий дате по совпадению (допустим если идет совпадения дата userformats---А8 и БД---С33, спрашивало заменить диапазон, если да то заменяло в книге БД с С33:G48), в случаи необходимости заменяло... сразу мозгов не хватило продумать этот момент, это необходимо для дальнейшей сортировки уже их другой книги, которая будут проводиться по определенным критериям типа даты функцией ВПР наверно. Но если данное условие тяжело сделать, отпишитесь пожалуйста, я буду что-нибудь придумывать другое. А вообще главное чтобы можно было копировать с разных листов в книгу БД. Огромное Вам спасибо EugeneS, я долго не мог придумать как это вообще будет выглядеть.
Вложения
Тип файла: zip -2-new izmen.zip (38.3 Кб, 8 просмотров)
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 08.11.2010 в 15:23.
staniiislav вне форума Ответить с цитированием
Старый 08.11.2010, 16:10   #4
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
Спасибо огромное!!! Это превосходно! Делает почти то что надо! Единственное, можно так сделать чтобы не было привязки к листу "Пользовательские форматы", ну чтобы я мог пользоваться этим сохранением с разных листов, допустим и с "Пользовательские форматы 222", а сохраняло все также и в туже книгу "БД"
И не хотелось бы наглеть, ну если возможно подскажите пожалуйста, можно еще чтобы делась проверка на совпадения дат из книги userformats --- А8, с книгой БД в столбце С, и если есть совпадения, спрашивало заменить заменить диапазон А1:D16 соответствующий дате по совпадению (допустим если идет совпадения дата userformats---А8 и БД---С33, спрашивало заменить диапазон, если да то заменяло в книге БД с С33:G48), в случаи необходимости заменяло... сразу мозгов не хватило продумать этот момент, это необходимо для дальнейшей сортировки уже их другой книги, которая будут проводиться по определенным критериям типа даты функцией ВПР наверно. Но если данное условие тяжело сделать, отпишитесь пожалуйста, я буду что-нибудь придумывать другое. А вообще главное чтобы можно было копировать с разных листов в книгу БД. Огромное Вам спасибо EugeneS, я долго не мог придумать как это вообще будет выглядеть.
см. вложение

Извините, не заметил Вашего вложения, сделал в старом (выложенном мною ранее)
Вложения
Тип файла: zip -2-new.zip (30.8 Кб, 19 просмотров)
EugeneS вне форума Ответить с цитированием
Старый 08.11.2010, 16:30   #5
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
Хорошо

Ваши знания бесценны EugeneS!!! Огромное спасибо!!! Теперь буду тестировать!!! На днях отпишусь, все ли получилось.
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 10.11.2010, 15:24   #6
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Здравствуйте EugeneS. Протестировал я макрос который вы написали на своем документе. Почти все работает отлично, я взял на себя смелость немного переделать макрос(в примере userformats я указал красным цветом что именно изменил в макросе, посмотрите пожалуйста правильно ли я сделал изменения), и добавил еще один столбец в пример.
Намучался я со своим документом, когда вставил макрос... С начало была проблема, не производилась проверка значения даты в БД, а проблема в том, что макрос или эксель (не знаю) не определял шрифт Calibri! Вроде все делаю правильно, а объект t в макросе носинг... пипец... пока методом тыка понял в чем проблема, думал поседею... Но вроде разобрался, ставлю на столбец А шрифт Arival и на ячейку B8 тоже поставил шрифт Arival, только тогда начал работать поиск по совпадению даты в книге БД, и соответственно начала производиться замена диапазона, а так при сохранении просто добавлялся диапазон в первую пустую ячейку в книге БД.
Но есть еще две проблемы:
1) при совпадении даты в книге userformats с книгой БД, замена происходит диапазона в книге БД без проблем, а вот второй шаг сохранения диапазона как отдельной книги страдает, дело в том что при самой замене, замена происходит не с книги userformats, а значения берутся с книги БД с ячейки А1! Получается создается копия листа (допустим) 2010 с книги БД! а надо, чтобы предлагало заменить лист из книги userformats. Получается, что вроде только при замене, при действии открытия книги Workbooks.Open (ActiveWorkbook.Path & "\Archive\" & "БД.xls"): On Error GoTo Handler ---- данные Date_name = Range("a1") берутся с книги БД!
2) если есть возможность, подскажите пожалуйста, как в данном макросе можно учесть, чтобы при сохранении диапазона с книги userformats в книгу БД сохранялись в защищенный лист в книге БД?
Заранее большущее спасибо!
Файлик прикрепил
Вложения
Тип файла: rar -2-new1.rar (37.0 Кб, 11 просмотров)
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 10.11.2010, 17:32   #7
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
а надо, чтобы предлагало заменить лист из книги userformats. Получается, что вроде только при замене, при действии открытия книги Workbooks.Open (ActiveWorkbook.Path & "\Archive\" & "БД.xls"): On Error GoTo Handler ---- данные Date_name = Range("a1") берутся с книги БД!
по вопросу 1: вот с этого момента непонятно ... что именно заменить: диапазон, лист, при каком событии и на что заменить?
EugeneS вне форума Ответить с цитированием
Старый 10.11.2010, 17:56   #8
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от EugeneS Посмотреть сообщение
по вопросу 1: вот с этого момента непонятно ... что именно заменить: диапазон, лист, при каком событии и на что заменить?
просто нажимаешь кнопку, и когда есть совпадение дат, выводится диалоговое окно, в котором появляется вопрос: "Совпадение даты. Заменить диапазон?" да или нет (в данном случаи спрашивается заменять данные в книге БД), допустим нажимаем заменить, и в книге БД все замечательно заменяется, затем выводиться второе диалоговое: "Сохранить?" (здесь уже происходит сохранение диапазона в отдельную книгу эксель), так вот, если нажимаем сохранить, сохраняется данные с книги БД, а нужно чтобы сохранялись с книги userformats. посмотрите в /arhive/2010/январь/ --- после того как я нажал кнопку в книге userformats, в книге БД была уже такая дата, и я нажал заметь(в книге БД все заменилось), затем нажал сохранить, и сохранился лист из книги БД, а не из книги userformats.
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 10.11.2010, 18:23   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Можно поучаствовать?
В userformats в ячейке А1 забита формула - уберите ее. Лучше уж в В8 поставить =А1. Find не находит значения, возвращаемые формулами. Т.е в БД в А:А у Вас были формулы и Find их пропускал, и дело тут, конечно, не в шрифте.
А по поводу копирования диапазона - вроде точек не хватало.
Еще добавил удаление кнопки на скопированном листе.
См. в файле.
Вложения
Тип файла: zip userformats.zip (15.1 Кб, 12 просмотров)
nilem вне форума Ответить с цитированием
Старый 11.11.2010, 09:45   #10
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Конечно можно, даже нужно )))
Я наверно не правильно выразил свою мысль.
И так. в документе userformats я сделал четыре сохранения в документ БД и автоматически сохранились отдельные листы в /архиве/2010/январь:
Пользовательские форматы 1 (01.01.2010)
Пользовательские форматы 1 (02.01.2010)
Пользовательские форматы 1 (03.01.2010)
Пользовательские форматы 1 (04.01.2010)
Тут проблем никаких!
Так вот, делаю пятое сохранение по дате 02.01.2010, в документе БД находит дату 02.01.2010, выскакивает диалоговое окно "Совпадение даты. Заменить диапазон?", нажимает заменить(к замене в документе БД вопросов нет, нашло дату 02.01.2010 и заменило диапазон в документе БД А17:Е32!), появляется второе диалоговое окно "Сохранить?" и вот тут есть проблема, когда нажимаем да, то в /архиве/2010/январь добавляется новый лист:
2010 (01.01.2010)
Пользовательские форматы 1 (01.01.2010)
Пользовательские форматы 1 (02.01.2010)
Пользовательские форматы 1 (03.01.2010)
Пользовательские форматы 1 (04.01.2010)
Получается создается копия листа 2010 из документа БД, а нужно чтобы создавалась копия листа из документа userformats. И тогда бы я просто заменял(ли не заменял) уже созданный документ Пользовательские форматы 1 (02.01.2010).
Посмотрите пожалуйста еще раз архив(прикрепил), и попробуйте заменить любую уже существующию дату например 03.01.2010, и посмотрите что получиться в /архиве/2010/январь
Ув. nilem, спасибо большое за отзыв, но проблема в том что, мне надо чтобы дата была введена именно в столбец В, а ссылка стояла в столбце а, т.к. уже есть таблица, которую не желательно изменять. Посмотрите пожалуйста еще этот архив, может что нибудь подскажите.
Еще раз Всем большущие спасибо за отзывы!
П.С. nilem, у меня все находит .Find, и вроде работает все исправно по моему, кроме замены в /архиве/2010/январь
Вложения
Тип файла: zip -2-new2.zip (63.1 Кб, 13 просмотров)
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 11.11.2010 в 09:49.
staniiislav вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с данными PycckuuPC Microsoft Office Excel 2 19.10.2010 22:33
Схема с данными Fezdipekla Microsoft Office Excel 0 11.06.2010 10:29
ComboBox с данными Domanoff БД в Delphi 9 21.04.2010 12:07
Управление данными Doublefaced Помощь студентам 3 06.03.2010 15:13
Файл с данными werser БД в Delphi 1 24.05.2008 23:40