![]() |
Задачка по Excel
Знакомая задачку задала...
Есть база данных (таблица) строительных материалов. Требуется разработать таблицу для автоматизации составления сметы с использованием данных из этой таблицы. Процедура работы должна выглядеть так: пользователь выбирает из списка (элемент управления) нужную позицию, в заданных вами ячейках отражаются цена за единицу размерности этой товарной позиции (из таблицы-базы). Пользователь задает необходимое количество этой товарной позиции и нажимает кнопку "включить в смету". Макрос добавляет наименование выбранной позиции, цену за единицу, указанное количество и общую стоимость (цена*количество) отдельной строкой в смету. Далее пользователь может выбрать произвольное кол-во товарных позиций и также включить их в смету. То есть число строк в смете должно увеличиваться, при этом форма сметы должна предусматривать общую сумму по включенным в нее строкам-позициям. После того, как пользователь закончил формирование сметы он должен ее распечатать (тоже через макрос). Если кто сможет сделать и сделает получит мой вечный респект :) |
Цитата:
Если я правильно понял, там должны быть элементы формы: список, кнопка добавления и кнопка печати? Если это просто две таблицы на разных листах, должно быть просто. А вообще, один деятель хотел аналогичную автоматизацыю. Я ему Access базу сделал, он остался доволен. ИМХО удобнее и надёжнее. |
а это просто задачка такая,
в данном случае под базой имеется ввиду таблица ака прайс-лист |
Подсказал бы кто-нить как к этому списку обращаться. Пробовал через Value - выдаёт ошибку. Или я параметры неправильно прописал? ...
|
да сам в непонятках =(
|
Как список работает, я понял. Теперь можно дальше ковырять.
|
а ты выкинь сюда то что есть, может мне че в голову придет
|
Пока ничего нет. Я только методом тыка вычислил как список работает. Прописываеш откуда брать данные (D10:D15) и куда выдавать ответ (C1). При изменении список прописывает в C1 порядковый номер выбранного элемента. Если выбрал D10, тогда С1 будет равен 1. Если D12 - С1 равен 3.
Через событие списка OnChange (вроде так назывался) можно получить новое значение C1. Дальше смотреть пока времени небыло. |
я до этого тоже докопался, а вот со скриптами/макросами в Excel я не дружу
|
если дружишь с Delphi, можешь
попробовать себя в OLE-программировании осуществлять манипуляции с Excel достаточно просто. v: variant; v:=CreateOleObject("Excel.Application"); v.Visible:=True; v.Cells[1,1]:=5.5 и т.д. |
А я макросы писАл довольно успешно. Потом поровыряю его на эту тему. :cool:
|
Это ещё актуально?
|
да, весьма
|
Вложений: 1
Ну что я могу сказать?
Праздники прошли, похмельный синдром тоже. Работающий прототип готов. хе-хе :biggrin: Только щас косяк заметил. В процедуре Sub Button6_Click() есть строчка Range("A2:D" & strLast).Select её нужно заменить на Range("A2:D" & strLast + 2).Select :cool: |
Ну и как? Хоть кому-нибудь пригодилось? :confused:
|
да весьма, нашел еще один баг: при прерывании печати
|
и что там происходит?
|
А там просто идет Runtime Error - метод завершен некорректно.
|
Ну, это по ходу уже баг свмого экселя, а не макро кода. Наверно, так будет с использованием любой внешней программы (как программа печати).
:cool: |
Часовой пояс GMT +4, время: 17:03. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.