Страницы: 1
RSS
Автозаполнение форм в excel
 
Всем доброе утро.  
Есть один файл с двумя листами:Лист1 и Лист2.На Лист1 находится форма а на лист два база с данными в табличном виде. Нужно чтоб данные кажадой строки Листа2 заполнялась бы в соответсвуюшие поля Лист1. В результате хочу получить и распечатать все заполненные бланки на Лист1, т.е чтоб они автоматически копировались(размножались) и заполнялись на Лист1 в количестве соответсвующем записей стрик в Лист2.    
Просмотрел все топики связанные с автозаполнением и не смог найти ответа решающего мою проблему.Пожалуйста помогите.  
Заранне вспасибо.
 
Это не поможет?  http://www.planetaexcel.ru/tip.php?aid=99
 
Этот топик я также просмотрел. Он заполняет форму по той строке где стоит Х. А мне нужно чтоб формы заполнялись в Лист1 в том количестеве сколько строчек в Лист2
 
1. Связываете бланк с базой примерно как описано по ссылке с помощью ВПР(), только вместо Х используйте номер группы.  
2. Пишите макрос - используя любой простеший цикл, подставляете в бланк номера групп и печатаете.  
И не надо ничего размножать - зачем эти сложности, печатайте по одному бланку.
 
Но мне нужны все запоненные формы на Лист1, для дальнейшей печати по 3 на одном листе формата А4.
 
"для дальнейшей печати по 3" - это сразу сказать было трудно?  
 
Предлагаю сделать 3 пустые формы на основе ВПР() из базы, сразу настроить вывод на лист (задать границы печати).  
Далее макросом перебираем базу с шагом 3 - заполняем сразу все 3 формы и печатаем, берём следующие 3 значения, заполняем, печатаем и т.д.  
Если напрягает печать последних пустых форм - можно настроить УФ так, чтоб пустые формы не были видны, или макросом их скрывать (например скрывать диапазон, для которого не хватило данных).  
Думаю, это будет удобнее, чем генерить например 100 форм и бороться с разбивкой по листам бумаги.  
А если бумагу на 90-й форме зажуёт? Макрос можно доработать на цикл с любой строки базы - если зажуёт, то можно не начинать всё с начала.  
Можно в макросе сделать подтверждение печати каждого листа - если вдруг брак печати, то можно остановиться или повторить/продолжить. Это если печатать нужно штук 10-20 листов. Если 1000 - тогда нужно положиться на принтер и удачу, и печатать без подверждения каждого листа (это ветвление кстати тоже можно заложить в код) :)
 
Спасибо за поддержку и совет.  
Но в моем случае, я все же нуждаюсь в автоматическом заполнении всех бланков одновременно, в том количестве сколько строк в Лист2. Но никак не могу это осуществить :((( Буду очень признателен если кто поможет.
 
{quote}{login=Hugo}{date=23.04.2012 04:09}{thema=}{post}"для дальнейшей печати по 3" - это сразу сказать было трудно?  
Предлагаю сделать 3 пустые формы на основе ВПР() из базы, сразу настроить вывод на лист (задать границы печати).  
Далее макросом перебираем базу с шагом 3 - заполняем сразу все 3 формы и печатаем, берём следующие 3 значения, заполняем, печатаем и т.д.  
{/post}{/quote}  
С чем конкретно у Вас сейчас трудности?
 
Не верю, что необходимо иметь сразу все бланки на одном листе (и кстати в каком виде - столбиком один под одним, или по несколько в ряд? И где бланк начинается и где заканчивается? Эта жёлтая полоса - это думана граница между бланками или как? И если их по 3 на страницу - сколько таких полос на странице? Примерчик бы..)  
Кстати, у меня при разбивке как в примере на один печатный лист помещается 2 бланка, а Вы говорили о трёх...  
Если убедите в необходимости - возможно будет решение, как их размножить.  
Но бороться с границами при распечатке кто будет? Вручную будете расставлять? Или печать не предусмотрена?  
(хотя конечно границы можно задать кодом - но кажется что ненужная это работа...)
 
Ещё вариант - заранее создать одну форму.  
В любой ячейке (пример для 28-й строки) забить формулу типа  
=INDIRECT("Лист2!A" & (ROW()+2)/30+3)  
или для 4-й строки  
=INDIRECT("Лист2!A" & (ROW()+26)/30+2)  
Задать этой ячейке цвет фона.  
По результату этой формулы в другие ячейки ВПР()ом вытянуть нужные данные (что именно нужно - не вполне понятно)  
Впрочем, можно в эту ячейку просто вытягивать номер нужной строки, и по этому номеру тянуть данные в другие ячейки.  
Задать каждой ячейке формы УФ, чтоб если данных нет, то форма сливается с фоном (без заливки, цвета и границ).  
 
Далее копируете эту форму ниже с шагом 30 строк столько раз, сколько может быть максимум данных.  
Т.е. если первая форма начиналась в 2-й строке, то вторая в 32-й, третья в 62-й и т.д.  
Формулы и УФ должны автоматически корректироваться.  
 
Теперь будет видно столько форм, сколько заполнено строк на втором листе.  
И никаких макросов - но много подготовительной работы.
 
Спасибо за помощь.  
Все заполненные бланки нужны для того чтобы пользователь сразу мог бы одной командой их распечатать. Нужны столбиком, один по одним. Жёлтая полоса - это  граница между бланками. Если на первом листе выделить границы печати, то все остальные станицы я думаю должны также печататься, будет ли с ними проблема?  
Пример прикрепил в файле, просто при копировании бланка ссылки на данные в таблице изменяются не так как надо.
 
{quote}{login=souren74}{date=27.04.2012 02:07}{thema=Re: Автозаполнение форм в excel}{post}... Все заполненные бланки нужны для того чтобы пользователь сразу мог бы одной командой их распечатать...{/post}{/quote}  
Вам , имхо, прямая дорога -  слияние данных Excel с формой в Word ПРИ ПЕЧАТИ... Как вариант слияния - http://www.planetaexcel.ru/tip.php?aid=203...  
ps Бланк желательно сделать удобного формата - 3 на А4, 2 на А4, кроме того сразу внести в допполя сумму, сумма прописью и пр.  
pps Есть и другие варианты - ищем-с... ;) -28681-
 
{quote}{login=souren74}{date=27.04.2012 02:07}{thema=Re: Автозаполнение форм в excel}{post}... Все заполненные бланки нужны для того чтобы пользователь сразу мог бы одной командой их распечатать...{/post}{/quote}  
Вам , имхо, прямая дорога -  слияние данных Excel с формой в Word ПРИ ПЕЧАТИ... Как вариант слияния - http://www.planetaexcel.ru/tip.php?aid=203...  
ps Бланк желательно сделать удобного формата - 3 на А4, 2 на А4, кроме того сразу внести в допполя сумму, сумма прописью и пр.  
pps Есть и другие варианты - ищем-с... ;) -12459-
 
"Все заполненные бланки нужны для того чтобы пользователь сразу мог бы одной командой их распечатать." - не вижу связи.  
Т.е. конечно вижу, но есть контраргументы. Высказаны уже выше :)  
"Если на первом листе выделить границы печати, то все остальные станицы" будут как попало. Но если заранее сформировать кучу бланков и задать им границы - то можно и так.  
Но зачем?!!!  
Да и размер файла получится немаленький...  
 
 
А чтоб при копировании ссылки изменялись ка надо - я выше столько времени на описание потратил... Всё оказывается зря...
 
Конечно не зря!!! Я вам очень признателен за помощь.    
Но дело в том что я не очень хорошо разбираюсь в excel-е. И как результат не смог понять функцию =INDIRECT, она при копировании остается не изменной(Далее копируете эту форму ниже с шагом 30 строк столько раз, сколько может быть максимум данных.Т.е. если первая форма начиналась в 2-й строке, то вторая в 32-й, третья в 62-й и т.д.Формулы и УФ должны автоматически корректироваться.) она не корректируется. Мне не ловко Вас просить сделать это за меня, я пытаюсь но увы никак не разберусь :(((
 
Вероятно Вам вместо indirect() нужно двссыл() применять :)  
Файл приложен - тянет номер, который можно замазать белым, если именно он не нужен, но по нему можно ВПР()ом тянуть остальные данные.  
Ну или как угодно...  
Но я думаю, что это бестолково - нужна одна/три формы, куда макросом в цикле подставлять номера и печатать.  
Можно вообще без формул - сразу все нужные данные во все ячейки подставлять макросом.
 
Вам просто цены нет!!! Вы просто спасли меня. Не нахожу слов как мне выразить свою благодарность Вам!!! Еще раз спасибо!!! А мне учиться, учиться и учиться.
 
Ну уж расшаркались... :)  
В принципе, если максимальное количество данных известно - можно наладить одну форму, затем скопировать её два раза ниже, разметить страницу, затем копировать эту тройку вниз хоть 100 раз (на 300 записей, только не промажьте с шагом 30!).  
Ненужные строки между тройками можно сделать пониже или скрыть.  
Проверить/задать разбивку на страницы.  
А когда юзер будет печатать - пусть задаёт нужное количество страниц (можно формулой большим красным цЫфром вне области печати написать, ну или на это дело написать небольшой простой макрос, который будет печатать столько листов, сколько есть реально данных.  
Но если где-то на предпоследнем листе принтер зажуёт - придётся вручную выставлять, с какого листа повторять печать.
 
Спасибо Вы мне очень помогли. Я еще с форума узнал как макросом защитить листы, все работает на ура! Осталось лишь разобраться с печатью, чтоб печатало столько листов, сколько есть заполненных бланков.  
Еще раз Огромное Вам спасибо добрый человек.
 
Если бланки с помощью УФ сделать невидимыми, если нет данных - то вероятно печатать будет только оставшиеся видимые.  
Но это нужно было делать сразу на первом бланке, до размножения. Я не сделал - много кропотливой работы, похоже что нужно задавать УФ для каждой ячейки (но не вникал, может можно и оптимизировать).  
Проще написать простой макрос, который будет выводить на печать столько листов/страниц, сколько будет реально данных в базе.  
Но если сбой печати - тогда нужно в коде предусмотреть выбор печатаемых листов.  
В общем, дерзайте :)  
Я бы делал по схеме "страница с тремя формами - макрос".
 
Игорь, УФ количество страниц не сократит - будет пытаться печатать белым :-)
 
Да? Не пробовал, не знаю...  
Ну если так - то глупо как-то...
 
Почему глупо? :-) Ведь принтер не знает, для чего ты применил УФ: может быть цвет поля в этом месте серый, а текст должен быть белым. Вот он и будет "печатать" белым.
 
Вместо летучей функции всеми любимая ИНДЕКС() :)  
 
=ИНДЕКС(Лист2!$A$3:$A$12;(СТРОКА()+26)/30)
Страницы: 1
Читают тему
Наверх