| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > [Перенесено из VB6/MS Access]Обновление сметы |
| Автор: Alex24 25.1.2012, 17:15 |
| Подскажите пожалуйста. Есть общая таблица, 8 листов (по типу материала) и до 200 наименований материала в каждом листе. Макрос делает выборку и сохраняет результат в заранее подготовленный шаблон (считает смету на конкретный заказ). По прошествии времени есть необходимость все наименования из сгенерированной таблицы-сметы отыскать в общей, и обновить цены если они изменились. Поясните как это сделать, с VBA знаком по CorelDraw потому испытываю серьезные трудности. Большое спасибо! |
| Автор: Akina 25.1.2012, 17:33 |
| В шаблон надо класть не значения, а ссылки на их расположение в прайсе. |
| Автор: irinazanuda 26.1.2012, 12:34 |
| Ссылки не хотелось бы... По-другому никак нельзя??? Подобная проблема и у меня есть |
| Автор: Akina 26.1.2012, 12:41 |
Обоснуйте. Вменяемо. Да пжалста... удалите имеющееся и перегенерите тем же скриптом новую версию с использованием новых данных. |
| Автор: Данкинг 26.1.2012, 13:15 |
| Тогда просто проходить циклом по смете и искать соответствующий товар в основной таблице. |
| Автор: Akina 26.1.2012, 13:58 |
Не, вот какая тебе разница - запускать скрипт перегенерации или запускать скрипт обновления, а? Более того - если какой-то идиот юзер внесёт в файл изменения, скрипт обновления может офигеть - а скрипт перегенерации отработает вне зависимости от деятельности прямоходящих. Тебе, тебе... ссылки - самое оно... не, не хочешь, не обновляй ссылки - при открытии документа Эксель будет запрашивать обновление, от которого можно отказаться, если нужны старые данные. |
| Автор: Alex24 26.1.2012, 17:10 |
| Дело в том что макрос писал не я, с VBA знаком частично (несложные макросы для CorelDraw). Если не трудно выложите следующий код (как я это вижу): Открытие таблицы прайс Открытие таблицы сметы Организация цикла нахождения всех элементов сметы (выбранные наименования) в таблице прайс в каждой из категория (8 листов по типу материала) Сравнение цены, внесение изменений Заранее огромное спасибо всем кто откликнется. |
| Автор: Akina 26.1.2012, 17:45 |
Такие работы не делаются дилетантами на коленке, тем более в серьёзных фирмах и для серьёзной работы. Их заказывают. И оплачивают, соответственно. Обращайтесь во http://vingrad.ru/. |
| Автор: Alex24 2.2.2012, 17:01 |
| Не хотелось бы грубить Akina, тем более модератору, ну раз не хочется то и не буду. Все что вы написали я и сам понимаю. Но я не делитант, я раньше программировал но на другом языке. Собственно задачу поставленную я выполнил покопавшись 2 дня в хелпе. Однако остался вопрос удобства и мой вопрос следующий. Я использовал: Set orderbook = Workbooks.Open ("заранее мне известный путь") 'для выборки (собственно сметы) И тоже самое для таблицы материалов из которой макрос выборки и запускался. Теперь задача стоит в готовый макрос добавить кнопочку "Обновить" которая вызывает диалоговое окно, пользователь выбирает залежавшуюся смету и она пересчитается с учетом текущих цен. Простой вопрос как мне при запуске макроса присвоить переменой скажем pricebook книгу из которой он запустился, так что бы переменная была доступна во всем модуле. И тоже самое для orderbook что бы она приняла таблицу которую откроет пользователь. Изменяюсь что так все заумно расписал, но практики давно не было. Заранее спасибо. |
| Автор: Akina 2.2.2012, 17:12 | ||||||||||||||||
1) Объявить переменную на уровне модуля
2) Выполнить в процедуре/функции присвоение в переменную ссылки на текущую книгу
3) Не забыть почистить ссылку по завершении обработки
Только не таблицу, а лист. У Экселя нет таблиц. 1) Объявить переменную на уровне модуля
2) Выполнить в процедуре/функции присвоение в переменную ссылки на текущую книгу
3) Не забыть почистить ссылку по завершении обработки
PS. У меня создаётся стойкое ощущение, что ведётся программирование не на Visual Basic версии 6, а на встроенном офисном Visual Basic for Applications. Если так - Вы жестоко ошиблись веткой форума - эти языки хоть и называются похоже, и имеют сходный синтаксис, но различаются так же (если не больше), как, например, С и С++... |
| Автор: Alex24 2.2.2012, 17:21 |
| Действительно вы правы Akina, только что это заметил, Visual Basic for Applications. Насколько это меняет то что вы написали? Собственно еще раз попытаюсь объяснить, что ранее использовал Set orderbook = Workbooks.Open ("заранее мне известный путь") теперь мне нужна та же переменная, но для файла открытого через диалоговое окно пользователем (как сделать тоже присвоение но для выбраного пользователем файла) и тоже самое но для файла из которого запустился макрос. Далее обе переменные используются в процедуре обновления сметы с операторами With, поиском через .Find и т.д. |
| Автор: Akina 2.2.2012, 21:26 |
Ну я изначально предполагал... потому ошмётки кода намекают на объектную модель Экселя. Давайте-ка мы поедем туда где тепло... Добавлено через 1 минуту и 26 секунд Модератор: Тема перенесена. |
| Автор: LOPUH 3.2.2012, 07:55 | ||
Alex24, наиболее удобно вам, на мой взгляд, использовать семейство встроенных окон Dialogs. Тип диалога, позволяющий выбрать файл, будет msoFileDialogFilePicker. Вот хороший пример его использования из интернетов
|
| Автор: Alex24 3.2.2012, 16:34 |
| LOPUH Большое спасибо. Тему можно закрыть во всем разобрался сам. |
| Автор: Alex24 9.2.2012, 16:52 |
| Подскажите пожалуйста, как при вызове диалога SaveAs к имени файла прибавить дату? |
| Автор: LOPUH 12.2.2012, 07:20 |
| Вообще то здесь принято для каждого вопроса создавать новую тему. По вопросу-мне кажется, в вашем случае лучше создать пользовательское диалоговое окно, а не пользоваться стандартными. так как что то добавить во встроенное будет достаточно проблематично. |