Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2011, 16:43   #1
lkbb
Пользователь
 
Регистрация: 22.07.2010
Сообщений: 11
По умолчанию VBA и зависимые выпадающие списки

Добрый вечер!
Столкнулся с проблемой - никак не могу заставить VBA генерировать зависимые выпадающие списки.
Проблема проиллюстрирована в файле "пример".

Если лист "данные", в нем три столбца - "модель", "тип двигателя" и "объем двигателя". В столбце "модель" независимый выпадающий список, с ним проблем не возникает. В столбце "тип двигателя" список зависимый; ссылается на динамический диапазон, зависящий от выбранной модели. В последнем столбце список также не статичный, но он ссылается на различные диапазоны в зависимости от типа двигателя.

Я хочу сделать так, чтобы в любой строке листа "данные" при двойном клике на любую ячейку строки макрос программно проставлял выпадающие списки, аналогичные "образцевой" строчке. Для этого я макросом "getformulas" на лист "формулы" собираю следующую инфу - Type, Operator, Formula1, Formula2 всех выпадающих списков.

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

А дальше начинаются проблемы.
При первом дабл-клике появляется список в первом столбце (он статичен), на втором столбце макрос выкидывает ошибку. После того, как в ячейке 1го столбца есть значение, повторный запуск макроса по дабл-клику дает выпадающий список во втором столбце. На третьем - ошибка. И даже если в 1м и 2м столбце есть значения, то на третьем появляется ошибка и выпадающего списка нет.

Теперь вопрос - как программно корректно проставлять динамические выпадающие списки даже при отсутствии значений в ячейках, на которые списки ссылаются?

Заранее спасибо за любые советы и рекомендации!

PS вариант с копированием ячеек из второй строки не подходит..

PPS перезалил пример - в предидущий раз не сохранились макросы.
Вложения
Тип файла: rar пример.rar (12.3 Кб, 106 просмотров)

Последний раз редактировалось lkbb; 24.06.2011 в 07:47.
lkbb вне форума Ответить с цитированием
Старый 23.06.2011, 23:11   #2
Watcher_1982
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 10
По умолчанию

Приветствую!

1) Программно генерируете элемент
ActiveSheet.OLEObjects.Add(ClassTyp e:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=306, Top:=30.75, Width:=49.5, Height:= _
14.25).Select
2) И загружаете в этот список при помощи события AddItem нужные значения
3) После того как будет выбрано значение из списка, удаляете его предварительно перенеся выбранное значение в ячейку....

С уважением, Антон
Watcher_1982 вне форума Ответить с цитированием
Старый 23.06.2011, 23:15   #3
Watcher_1982
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 10
По умолчанию

Забыл дописать
4) В следующих ячейках прежде чем создавать список просто будите смотреть чтобы он удовлетворял условию из предыдущего списка
Watcher_1982 вне форума Ответить с цитированием
Старый 24.06.2011, 07:44   #4
lkbb
Пользователь
 
Регистрация: 22.07.2010
Сообщений: 11
По умолчанию

Watcher_1982, спасибо за совет!
Но хотелось бы избежать использования OLEObjects и решить проблему с помощью стандартных средств excel, а именно Validation ,поскольку в дальнейшем это упростит манипуляции с таблицей
lkbb вне форума Ответить с цитированием
Старый 24.06.2011, 07:47   #5
Watcher_1982
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 10
По умолчанию

Приветствую!
С помощью стандартных средств excel даже не знаю, походу нельзя иначе бы уже предложил кто-нить....
Я всегда работал с OLEObjects и никаких проблем не было
Watcher_1982 вне форума Ответить с цитированием
Старый 24.06.2011, 11:37   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

А если такой вариант: двойной клик в А2:А1000 создает список в ячейке, а выбор в списках ст. А и В создает список в ст. В и С соответственно.
Вложения
Тип файла: zip ДвигателиПример.zip (15.2 Кб, 222 просмотров)
nilem вне форума Ответить с цитированием
Старый 24.06.2011, 12:21   #7
Watcher_1982
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
А если такой вариант: двойной клик в А2:А1000 создает список в ячейке, а выбор в списках ст. А и В создает список в ст. В и С соответственно.
Интересный код... !
А он сильно усложнится если надо будет списки взаимозависимые например на 6 столбцов создавать + списки должны открываться в определенных диапазонах?
Watcher_1982 вне форума Ответить с цитированием
Старый 24.06.2011, 13:02   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Watcher_1982 Посмотреть сообщение
если надо будет списки взаимозависимые например на 6 столбцов создавать + списки должны открываться в определенных диапазонах?
Можно, например, вместо If Target.Column = 1 Then ... End If попробовать
Код:
Select Case Target.Column
Case 1
Case 2
...
End Select
nilem вне форума Ответить с цитированием
Старый 24.06.2011, 14:34   #9
lkbb
Пользователь
 
Регистрация: 22.07.2010
Сообщений: 11
По умолчанию

Действительно, интересный вариант, спасибо

Если создавать зависимый список в ячейе вручную, то excel ругается "при вычислении "источник" возникает ошибка. Продолжить?"
и две кнопочки - "да" и "нет". Причем если выбрать "да", то список появится, хотя и будет пустым.

Возможно, у Validation есть некое свойство, отслеживающее подобные ошибки и позволяющее их игнорировать?
lkbb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависимые выпадающие списки Anastasiya_77 Microsoft Office Excel 7 18.04.2011 07:52
Выпадающие списки. Ras2im Microsoft Office Excel 13 08.03.2011 13:00
Выпадающие списки Доктор Microsoft Office Excel 14 17.08.2010 19:41
Выпадающие списки Marsik JavaScript, Ajax 1 14.12.2009 00:55
Зависимые выпадающие списки Axxie Microsoft Office Excel 5 16.06.2009 16:47