Модераторы: mihanik

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Перенесено из VB6/MS Access]Обновление сметы, 2 таблицы 
:(
    Опции темы
Alex24
Дата 25.1.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.1.2012

Репутация: нет
Всего: нет



Подскажите пожалуйста. Есть общая таблица, 8 листов (по типу материала) и до 200 наименований  материала в каждом листе. Макрос делает выборку и сохраняет результат в заранее подготовленный шаблон (считает смету на конкретный заказ). По прошествии времени есть необходимость все наименования из сгенерированной таблицы-сметы отыскать в общей, и обновить цены если они изменились. Поясните как это сделать, с VBA знаком по CorelDraw потому испытываю серьезные трудности. Большое спасибо!
PM MAIL   Вверх
Akina
Дата 25.1.2012, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



В шаблон надо класть не значения, а ссылки на их расположение в прайсе.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
irinazanuda
Дата 26.1.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 911
Регистрация: 23.6.2010

Репутация: нет
Всего: 18



Ссылки не хотелось бы... По-другому никак нельзя??? Подобная проблема и у меня есть
PM MAIL   Вверх
Akina
Дата 26.1.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(irinazanuda @  26.1.2012,  13:34 Найти цитируемый пост)
Ссылки не хотелось бы... 

Обоснуйте. Вменяемо.

Цитата(irinazanuda @  26.1.2012,  13:34 Найти цитируемый пост)
По-другому никак нельзя??? 

Да пжалста... удалите имеющееся и перегенерите тем же скриптом новую версию с использованием новых данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
irinazanuda
Дата 26.1.2012, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 911
Регистрация: 23.6.2010

Репутация: нет
Всего: 18



Цитата(Akina @  26.1.2012,  12:41 Найти цитируемый пост)
удалите имеющееся и перегенерите тем же скриптом новую версию с использованием новых данных. 

вот этим и занимаюсь каждую ночь..


Цитата(Akina @  26.1.2012,  12:41 Найти цитируемый пост)
Обоснуйте. Вменяемо.

Если вменяемо... или это кому?!... Понятно--- ну, "не могу я без базару"... есть коммерческая тайна какбе... ладно пусть мальчик пробует-- я посмотрю
PM MAIL   Вверх
Данкинг
Дата 26.1.2012, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Тогда просто проходить циклом по смете и искать соответствующий товар в основной таблице.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akina
Дата 26.1.2012, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(irinazanuda @  26.1.2012,  13:51 Найти цитируемый пост)
вот этим и занимаюсь каждую ночь..

Не, вот какая тебе разница - запускать скрипт перегенерации или запускать скрипт обновления, а? Более того - если какой-то идиот юзер внесёт в файл изменения, скрипт обновления может офигеть - а скрипт перегенерации отработает вне зависимости от деятельности прямоходящих.

Цитата(irinazanuda @  26.1.2012,  13:51 Найти цитируемый пост)
Если вменяемо... или это кому?!... 

Тебе, тебе... ссылки - самое оно... не, не хочешь, не обновляй ссылки - при открытии документа Эксель будет запрашивать обновление, от которого можно отказаться, если нужны старые данные.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Alex24
Дата 26.1.2012, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.1.2012

Репутация: нет
Всего: нет



Дело в том что макрос писал не я, с VBA знаком частично (несложные макросы для CorelDraw). Если не трудно выложите следующий код (как я это вижу):

Открытие таблицы прайс
Открытие таблицы сметы
Организация цикла нахождения всех элементов сметы (выбранные наименования) в таблице прайс в каждой из категория (8 листов по типу материала)
Сравнение цены, внесение изменений 

Заранее огромное спасибо всем кто откликнется.
PM MAIL   Вверх
Akina
Дата 26.1.2012, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Alex24 @  26.1.2012,  18:10 Найти цитируемый пост)
макрос писал не я, с VBA знаком частично 

Такие работы не делаются дилетантами на коленке, тем более в серьёзных фирмах и для серьёзной работы. Их заказывают. И оплачивают, соответственно. 
Обращайтесь во фриланс.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Alex24
Дата 2.2.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.1.2012

Репутация: нет
Всего: нет



Не хотелось бы грубить Akina, тем более модератору, ну раз не хочется то и не буду. Все что вы написали я и сам понимаю. Но я не делитант, я раньше программировал но на другом языке. Собственно задачу поставленную я выполнил покопавшись 2 дня в хелпе. Однако остался вопрос удобства и мой вопрос следующий. Я использовал:

Set orderbook = Workbooks.Open ("заранее мне известный путь")  'для выборки (собственно сметы)
И тоже самое для таблицы материалов из которой макрос выборки и запускался.

Теперь задача стоит в готовый макрос добавить кнопочку "Обновить" которая вызывает диалоговое окно, пользователь выбирает залежавшуюся смету и она пересчитается с учетом текущих цен.

Простой вопрос как мне при запуске макроса присвоить переменой скажем pricebook книгу из которой он запустился, так что бы переменная была доступна во всем модуле. И тоже самое для orderbook что бы она приняла таблицу которую откроет пользователь. Изменяюсь что так все заумно расписал, но практики давно не было. Заранее спасибо.

Это сообщение отредактировал(а) Alex24 - 2.2.2012, 17:02
PM MAIL   Вверх
Akina
Дата 2.2.2012, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Alex24 @  2.2.2012,  18:01 Найти цитируемый пост)
как мне при запуске макроса присвоить переменой скажем pricebook книгу из которой он запустился, так что бы переменная была доступна во всем модуле. 

1) Объявить переменную на уровне модуля
Код

Dim pricebook As EXCEL.Workbook

2) Выполнить в процедуре/функции присвоение в переменную ссылки на текущую книгу
Код

Set pricebook = ThisWorkBook

3) Не забыть почистить ссылку по завершении обработки
Код

Set pricebook = Nothing


Цитата(Alex24 @  2.2.2012,  18:01 Найти цитируемый пост)
тоже самое для orderbook что бы она приняла таблицу которую откроет пользователь.

Только не таблицу, а лист. У Экселя нет таблиц.
1) Объявить переменную на уровне модуля
Код

Dim orderbook As EXCEL.Worksheet

2) Выполнить в процедуре/функции присвоение в переменную ссылки на текущую книгу
Код

Set orderbook = Activesheet

3) Не забыть почистить ссылку по завершении обработки
Код

Set orderbook = Nothing


PS. У меня создаётся стойкое ощущение, что ведётся программирование не на Visual Basic версии 6, а на встроенном офисном Visual Basic for Applications. Если так - Вы жестоко ошиблись веткой форума - эти языки хоть и называются похоже, и имеют сходный синтаксис, но различаются так же (если не больше), как, например, С и С++...




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Alex24
Дата 2.2.2012, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.1.2012

Репутация: нет
Всего: нет



Действительно вы правы Akina, только что это заметил, Visual Basic for Applications. Насколько это меняет то что вы написали?
Собственно еще раз попытаюсь объяснить, что ранее использовал Set orderbook = Workbooks.Open ("заранее мне известный путь") теперь мне нужна та же переменная, но для файла открытого через диалоговое окно пользователем (как сделать тоже присвоение но для выбраного пользователем файла) и тоже самое но для файла из которого запустился макрос. Далее обе переменные используются в процедуре обновления сметы с операторами With, поиском через .Find и т.д.
PM MAIL   Вверх
Akina
Дата 2.2.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Alex24 @  2.2.2012,  18:21 Найти цитируемый пост)
Насколько это меняет то что вы написали?

Ну я изначально предполагал... потому ошмётки кода намекают на объектную модель Экселя.

Давайте-ка мы поедем туда где тепло...

Добавлено через 1 минуту и 26 секунд
Модератор: Тема перенесена.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LOPUH
Дата 3.2.2012, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



Alex24,   наиболее удобно вам, на мой взгляд, использовать семейство встроенных  окон Dialogs.    Тип диалога, позволяющий выбрать файл, будет msoFileDialogFilePicker. Вот хороший пример его использования из  интернетов  smile 
Код

Sub Main()

    'Объявление переменной как объекта FileDialog.
    Dim fd As FileDialog

    'Создание объекта FileDialog как диалогового окна типа File Picker.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    'Объявление переменной для хранения пути к каждому выбранному элементу.
    'Несмотря на то что путь представляет собой строковую переменную (String),
    'данная переменная должна являться объектом типа Variant, поскольку процедура
    'цикла For Each...Next работает только с объектами Variant и Object.
    Dim vrtSelectedItem As Variant

    'Использование блока With...End With для создания ссылки на объект FileDialog.
    With fd

        'Использование метода Show для вывода диалогового окна типа File Picker.
        'Пользователь нажал кнопку подтверждения действия.
        If .Show = -1 Then

            'Перебор элементов из коллекции FileDialogSelectedItems.
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem содержит путь к каждому выбранному элементу.
                'Здесь можно использовать любые нужные функции ввода/вывода по отношению к полученному пути.
                'В данном примере путь просто отображается в окне сообщения.
                MsgBox "Путь: " & vrtSelectedItem

            Next vrtSelectedItem
        'Пользователь нажал кнопку отмены действия.
        Else
        End If
    End With

    'Очистка значения переменной-ссылки.
    Set fd = Nothing

End Sub

PM MAIL   Вверх
Alex24
Дата 3.2.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.1.2012

Репутация: нет
Всего: нет



LOPUH Большое спасибо. Тему можно закрыть во всем разобрался сам.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.