Программное заполнение формы Excel из Access

Программирование на Visual Basic for Applications
Cujo
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 04.05.2009 (Пн) 11:01

Программное заполнение формы Excel из Access

Сообщение Cujo » 04.05.2009 (Пн) 11:16

Доброго времени суток.

Я уже более полугода программирую в VBA Access и Excel, однако совсем недавно получил задание, справится с которым не могу.

Суть проблемы в следующем:
Есть база Access. Есть книга Excel. В книге Excel очень много формул разного рода, сложных макросов - в сумме файл без данных весит около 5 метров, что, в принципе, не мало. Один из макросов представляет собой форму, на которой есть поле для ввода названия, и кнопка, на которую затем нужно нажать. Вводить данные надо много раз, соответственно несколько раз вызывать макрос, вводить информацию в поле, и нажимать на кнопку. Информация берется из базы данных Access. Этот процесс и нужно автоматизировать.
Самое интересное заключается в том, что информация, которая должна вводится в форму макроса, расчитывается в Access, поэтому изначально пользователь открывает базу Access, производит там ряд действий, а затем получает данные, которые и должны быть занесены в Excel. Поэтому управление должно происходить из Access - это аксиома.
В итоге получаем следующую картину:
Из Access вызываем Excel, запускаем программно макрос - и программно же(!) вводим данные из Access в поле, и программно же(!) жмем на кнопку. Снова вызываем макрос и т.д.
Но. Вещи вроде
With Workbooks("C:\РабочаяПапка\ФайлExcel.xls").VBProject.VBComponents("НазваниеМакроса")
.Properties("Combobox1").Value = "Информация1"
End With
не работают. "Subscipt out of range".
Но тут же работает
Workbooks.Open FileName:="C:\РабочаяПапка\ФайлExcel.xls"
Да и даже если бы первый вариант работал, то непонятно, как, используя его, нажать на кнопку.
Короче, как быть - не могу сообразить. Инет перерыл вдоль и поперек - больше ничего подходящего найти не могу. Спасите!

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 05.05.2009 (Вт) 19:15

Cujo писал(а):Доброго времени суток.

Я уже более полугода программирую в VBA Access и Excel, однако совсем недавно получил задание, справится с которым не могу.

Суть проблемы в следующем:
Есть база Access. Есть книга Excel. В книге Excel очень много формул разного рода, сложных макросов - в сумме файл без данных весит около 5 метров, что, в принципе, не мало. Один из макросов представляет собой форму, на которой есть поле для ввода названия, и кнопка, на которую затем нужно нажать. Вводить данные надо много раз, соответственно несколько раз вызывать макрос, вводить информацию в поле, и нажимать на кнопку. Информация берется из базы данных Access. Этот процесс и нужно автоматизировать.
Самое интересное заключается в том, что информация, которая должна вводится в форму макроса, расчитывается в Access, поэтому изначально пользователь открывает базу Access, производит там ряд действий, а затем получает данные, которые и должны быть занесены в Excel. Поэтому управление должно происходить из Access - это аксиома.
В итоге получаем следующую картину:
Из Access вызываем Excel, запускаем программно макрос - и программно же(!) вводим данные из Access в поле, и программно же(!) жмем на кнопку. Снова вызываем макрос и т.д.
Но. Вещи вроде
With Workbooks("C:\РабочаяПапка\ФайлExcel.xls").VBProject.VBComponents("НазваниеМакроса")
.Properties("Combobox1").Value = "Информация1"
End With
не работают. "Subscipt out of range".
Но тут же работает
Workbooks.Open FileName:="C:\РабочаяПапка\ФайлExcel.xls"
Да и даже если бы первый вариант работал, то непонятно, как, используя его, нажать на кнопку.
Короче, как быть - не могу сообразить. Инет перерыл вдоль и поперек - больше ничего подходящего найти не могу. Спасите!


имхо что то ты как то через задницу все придумал - не легче ли скриптом из Access заполнять сразу целевые ячейки в файле Excel? а этот твой "макрос" оставить для случаев ручного ввода?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Программное заполнение формы Excel из Access

Сообщение RayShade » 05.05.2009 (Вт) 19:53

Я всегда считал такие вещи проявлением крайней степени идиотизма. Почему, незаслуженно забыт Word? В нем наверняка же можно было тоже производить какие-то полезные действия. И Outlook. А Powerpoint, Visio и Binder? Почему эти продукты Office никак не участвуют в процессе?

Это я к чему все говорю. Есть место где данные хранят, есть место где их процессят. И не надо городить огород, когда приходится переключаться из одной софтины в другую. Храните данные в MDB, и сделайте к ним фейс на Excel, если это так необходимо.
I don't understand. Sorry.

Lilo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 30.03.2009 (Пн) 12:44

Re: Программное заполнение формы Excel из Access

Сообщение Lilo » 07.05.2009 (Чт) 8:18

и вообще, зачем нужно "нажимать" кнопку?
если уже есть готовый макрос sub button_click() его нужно только запустить наверное

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 07.05.2009 (Чт) 12:51

Lilo писал(а):и вообще, зачем нужно "нажимать" кнопку?
если уже есть готовый макрос sub button_click() его нужно только запустить наверное


не все так просто, явных способов обратиться к функции или переменной в Excel из другого программного средства я не нашел, и думаю это вообще врятли предусмотрено, гарантировано можно вызвать макрос Excel из другого программного пакета. Но при этом хз как в него передавать данные.
Только разве что записать данные в лист, а потом инициировать макрос, который будет эти данные считывать с листа и обрабатывать соответствующим образом. Либо наоборот записать все в таблице Access, и вызвать макрос, который заберет данные оттуда.
Не работал практически с WinAPI, думаю через него можно перехватить появившееся окно формы и работать с ним.

Но это всеравно все сквозьочковые способы, RayShade сказал абсолютно правильно - данные надо процессить в одном месте. Гонять их из одного пакета в другой, значит в десятки раз увеличивать время их обработки - или проц проведет все операции в рамках одного процесса и просто запишет данные в файл Excel, или же он должен будет инициировать второй процесс (Excel), и колбасить память во время переключения между ними...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Программное заполнение формы Excel из Access

Сообщение iGrok » 07.05.2009 (Чт) 15:55

amokr писал(а):Не работал практически с WinAPI, думаю через него можно перехватить появившееся окно формы и работать с ним.

<offtop>Угу. А ещё у нас продаются специальные микроскопы для забивания гвоздей...</offtop>
label:
cli
jmp label

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 07.05.2009 (Чт) 22:54

iGrok писал(а):
amokr писал(а):Не работал практически с WinAPI, думаю через него можно перехватить появившееся окно формы и работать с ним.

<offtop>Угу. А ещё у нас продаются специальные микроскопы для забивания гвоздей...</offtop>


не ну вдруг упреццо делать именно "программное нажимание кнопы" :D :))))

Lilo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 30.03.2009 (Пн) 12:44

Re: Программное заполнение формы Excel из Access

Сообщение Lilo » 08.05.2009 (Пт) 9:53

Милый amokr, я и не утверждаю, что выбранный товарищем cujo способ, самый оптимальный. Если ему хочется изобретать велосипед, его на то право)))) Он спросил, как программно обратиться к форме (ввести данные в окно и нажать на кнопку), я только предложила как это сделать :wink:

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

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 08.05.2009 (Пт) 12:39

Lilo писал(а):Милый amokr, я и не утверждаю, что выбранный товарищем cujo способ, самый оптимальный. Если ему хочется изобретать велосипед, его на то право)))) Он спросил, как программно обратиться к форме (ввести данные в окно и нажать на кнопку), я только предложила как это сделать :wink:

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



Милая, как вас там, или идите обратно в песочницу программить куличики, или отучайтесь хамить.
Вы патологически наивны если думаете что ваше гениальное замечание про то что для "программного нажатия" на контрол, надо вызвать соответствующий обработчик события стало хоть сколько нибудь значимым откровением для кого нибудь, кто не вчера слез с горшка.
Во вторых идите учите матчасть наконец:
Если вы сумеете записать в модуль макроса обработчик событий контрола, расположенного на форме, я думаю публика будет исключительно удивлена. Потому что проблема именно в том, что из стороннего приложения нельзя обратится к большей части кода, записанного в проекте Excel. (или по крайней мере я не знаю, и никто больше его не озвучил ) Обратится можно только к макромодулям и к самим листам.
И кстати этот факт, естественно помимо демонстрацции вашей непроходимой... ээ.. незнания среды, так же обесценивает вашу попытку сарказма в отношении моего предполагаемого незнания разницы между понятиями "макрос" и "процедура".


ПС то остальные участники дискуссии: простите за количество лучей.. эээ... короче просто оскорблен в лучших чувствах - написал доброжелательный в общем мессаг с кратким изложением проблемы, а в ответ "это"

Lilo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 30.03.2009 (Пн) 12:44

Re: Программное заполнение формы Excel из Access

Сообщение Lilo » 08.05.2009 (Пт) 13:09

*** ушла в песошницу лепить куличики
... а то здесь что-то люди вежливые слишком
мне, хамке, среди них не место...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Программное заполнение формы Excel из Access

Сообщение iGrok » 08.05.2009 (Пт) 13:37

Мда.. Насколько я вижу, хам здесь только один. И это отнюдь не Lilo..
label:
cli
jmp label

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 08.05.2009 (Пт) 14:18

iGrok писал(а):Мда.. Насколько я вижу, хам здесь только один. И это отнюдь не Lilo..


хм:) всегда считал что виновен инициатор:) разве я где то в своем сообщении от 07.05.2009 (Чт) 13:51 допустил хоть слово, которое бы могло спровоцировать ту реакцию Лило, от которой я уже вынужден был защищаться?
Помоему так даже показаться немогло - как максимум его можно было расценить как приглашение к доброжелательной дискуссии, или прояснению способа обращения к упомянутому обработчику событий, при котором не нужно было бы записывать входные данные в листы excel.

Так что претензия довольно странна. Что же касается тона ответа, то за него я уже извинялся.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Программное заполнение формы Excel из Access

Сообщение alibek » 08.05.2009 (Пт) 14:22

amokr писал(а):...допустил хоть слово, которое бы могло спровоцировать ту реакцию Лило, от которой я уже вынужден был защищаться?

Ты защищался от фразы "Милый amokr"?
Это какое-то страшное оскорбление?
Lasciate ogni speranza, voi ch'entrate.

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 08.05.2009 (Пт) 14:36

alibek писал(а):
amokr писал(а):...допустил хоть слово, которое бы могло спровоцировать ту реакцию Лило, от которой я уже вынужден был защищаться?

Ты защищался от фразы "Милый amokr"?
Это какое-то страшное оскорбление?


Скорее от "макросов-событий этих элементов."

Хотя не суть. Подробный анализ текста делать смысла нет, его троллинговая направленность очевидна.

Суть в понятии "Хам" - это человек относящийся непочтительно к кому либо без причины. У меня причина была - вместо пояснения методов передачи значений из Access в Excel без записи их на листах, я получил пост, в котором мне практически в вину вменялось непонимание сценария действий (access->макрос->форма), который я же сам практически и описал в том своем сообщении, на которое она отвечала:) забавно правда?

Хотя ответил я конечно черезчур резко, за что, как я уже два раза упомянул, я извинился.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Программное заполнение формы Excel из Access

Сообщение iGrok » 08.05.2009 (Пт) 16:12

<offtop>2 amokr:
Не сочтите за личное оскорбление, но у Вас явно что-то не так с самооценкой или самомнением. Где Вы там узрели "вменение в вину"? Проще надо быть, проще. Здоровый пофигизм, опять же, вещь нелишняя. И тогда никакие тролли не страшны. Ага. А вот хамить в ответ бессмысленно.</offtop>

З.Ы. Простите за оффтоп. Вот чисто органически не могу терпеть, когда при мне оскорбляют девушку. Даже при том, что всегда помню, что за "женской манерой речи" может стоять кто угодно... :)
label:
cli
jmp label

amokr
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 04.05.2009 (Пн) 13:27

Re: Программное заполнение формы Excel из Access

Сообщение amokr » 08.05.2009 (Пт) 16:30

iGrok писал(а):<offtop>2 amokr:
Не сочтите за личное оскорбление, но у Вас явно что-то не так с самооценкой или самомнением. Где Вы там узрели "вменение в вину"? Проще надо быть, проще. Здоровый пофигизм, опять же, вещь нелишняя. И тогда никакие тролли не страшны. Ага. А вот хамить в ответ бессмысленно.</offtop>

З.Ы. Простите за оффтоп. Вот чисто органически не могу терпеть, когда при мне оскорбляют девушку. Даже при том, что всегда помню, что за "женской манерой речи" может стоять кто угодно... :)


да тут дело не в оскорблении и не в самооценке:) я понимаю суть претензий, хотя имхо гендерные различия и соответствующее поведение в интернете, штука очень спорная - по сути тут нет полов, тут есть только личности и их мнения:)
Если бы я писал то сообщение сейчас, я бы конечно построил его поиному, но это уже невозможно:) так что теперь я просто стараюсь быть последовательным и защищать ту позицию, которую выбрал, с логическим обоснованнием она выглядит все же лучше чем без оного:)

GDK
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 23.10.2008 (Чт) 16:15

Re: Программное заполнение формы Excel из Access

Сообщение GDK » 25.06.2009 (Чт) 11:08

Харе авто пить. Способы запуска макросов с параметрами есть точно. Забыл как называется, но вроде Run(). Только вызывать надо с помощью call, а то с параметрами не будет работать. И по моему код в обработчике события нажатия на кн. лучше делать как можно меньше. Т.е. самое лучшее, по моему, когда пишется процедура иль ф-я, она запускается из обработчика события. Кроме того есть возможность создать в екселе класс и потом в аксесе можно ведь пользоваться объектами такого класса - передавай, принимай чего хочешь при помощи св-в, методов, удобно.

Спасение близко :)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Программное заполнение формы Excel из Access

Сообщение Денис » 25.06.2009 (Чт) 12:34

Хм, забавно пофлудили.
А вообще, ситуация, описанная автором топика не нова. Такие случаи бывают, когда на предприятии долгие годы работает продукт, написанный несколькими поколениями программистов. Обычно такие продукты, если визуализировать, похожи на старые дореволюционные дома с кучей пристроек-скворечников. С одной стороны деревянный какркас, с другой шиферный, сверху глиной налеплено, сзади кусок кирпичной стены.
Выкорчевать все это и поставить новый софт — очень смелое решение, как для руководства, так и для подчиненных. Вот и приходится лепить к имеющемуся скворечнику все новые загородки и заплатки.

Сам как-то админил подобный продукт: постепенно заменил все функциональные модули ооп-ными классами, облагородил и осовременил интерфейс, приблизив его к одинэсочному. Это заняло около года. А потом слегка поднажал на руководство и они закупили 1с. Пару недель конвертаций, и готово. Обезьянки немного повозмущались и забарабанили по клавишам уже в одинэске.
Как говорится и волк сыт, и овцы целы.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList