Excel: сложность с элементом Combobox панели Формы

Программирование на Visual Basic for Applications
playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Excel: сложность с элементом Combobox панели Формы

Сообщение playa » 18.02.2008 (Пн) 1:28

Изображение

Кратко ситуация в следующем. Пишу расписание для заочного отделения. Решил для этого использовать элементы Комбобоксы, но взял их с панели инструментов "Формы", а не "Элементы управления". Данный элемент в качестве списка значений использует диапазон на другом листе; связь у комбобокса с ячейкой, соотвественно, той, над которой он находится.
Сама проблема:
хотел написать универсальный макрос, который возвращал бы адрес связанной ячейки того комбобокса, в котором выбрали какое-то значение. Но тут-то себя и загнал в тупик: а как средствами вба определить с каким комбобоксом пользователь работал и адрес его результирующей ячейки?
Как вариант, может есть в vba возможность просто определить адрес ячейки, в котором изменялось ее значение? Я найти не смог. Сижу над этой проблемой уже несколько дней. Блин, так не хочется находить эту ячейку "сканированием" - диапазон большой.
На всякий случай: варианты типа ActiveCell.Address не проходят - курсор в данном случае с комбо не используется... Заранее спасибо за любые советы и помощь.

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

Сообщение alibek » 18.02.2008 (Пн) 8:45

Если каждому комбобоксу придать уникальное имя, то проверяй Application.Caller.
Lasciate ogni speranza, voi ch'entrate.

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 18.02.2008 (Пн) 10:40

playa
А чем не подходит "Назначить макрос"?

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 18.02.2008 (Пн) 12:04

anvg писал(а):playa
А чем не подходит "Назначить макрос"?

Я так и хочу - назначить для каждого комбобокса (их около 1000) выполнение одного универсального макроса, который бы "понимал" с каким именно комбобоксом работает пользователь и возвращал его адрес.

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 18.02.2008 (Пн) 12:41

alibek писал(а):Если каждому комбобоксу придать уникальное имя, то проверяй Application.Caller.

Спасибо, все отлично работает! Предполагая что-то подобное, я для этого дела даже имена комбобоксам давал соотвествующие: С_3, S_12, О_10, но только не знал чем их вызвать. Еще раз спасибо. Закрываемся.

З.Ы.
Чисто из спортивного интереса, скажите, как узнать адрес ячейки, в которой изменились данные средствами макроса или формулой? Есть ли какие механизмы "слежения" в эксель? Усиленно гуглися, но ответа найти не смог. Вопрос для общего развития.

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

Сообщение alibek » 18.02.2008 (Пн) 13:55

Для листа есть событие Worksheet_Change. В нем передается ячейка, в которой произошло изменение.
Но я сомневаюсь, что там отслеживаются изменения, вносимые макросом или в результате перевычисления формул.
Lasciate ogni speranza, voi ch'entrate.

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 18.02.2008 (Пн) 14:10

alibek писал(а):Для листа есть событие Worksheet_Change. В нем передается ячейка, в которой произошло изменение.
Но я сомневаюсь, что там отслеживаются изменения, вносимые макросом или в результате перевычисления формул.


Да, я с этого начал - тишина.
Тем не менее, еще раз спасибо за помощь, использую Application.Caller.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 18.02.2008 (Пн) 18:07

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

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 19.02.2008 (Вт) 7:30

Димитрий писал(а):А не проще использовать один комбобокс. Данные можно менять в нем в зависимости от активной ячейки и соответственно туда и загонять выбор.

А можно подробнее об этом способе - я не совсем понял?

alex_gearbox
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 09.01.2008 (Ср) 21:34
Откуда: г. Волгоград

Сообщение alex_gearbox » 19.02.2008 (Вт) 20:47

Вероятно, имелось ввиду, что содержимое комбобокса изменяется (если оно должно изменяться) в зависимости от того, какая ячейка выделена.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 19.02.2008 (Вт) 21:42

Посмотри:
Вложения
konte.zip
(9.97 Кб) Скачиваний: 202

alex_gearbox
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 09.01.2008 (Ср) 21:34
Откуда: г. Волгоград

Сообщение alex_gearbox » 19.02.2008 (Вт) 21:55

Димитрий как обычно делает не просто классно, а мега-классно!
Реально получается интерактивный документ.

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 19.02.2008 (Вт) 23:38

Димитрий писал(а):Посмотри:


Просто ИДЕАЛЬНО! Придется попочумба, чтобы переделать, но вариант просто восхитительный - без нагромождения комбобоксов!

playa
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 18.02.2008 (Пн) 0:37

Сообщение playa » 19.02.2008 (Вт) 23:39

Спасибо за участие и реальную помощь!


Вернуться в VBA

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

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

    TopList  
cron