Страницы: 1
RSS
Событие Change для comboBox срабатывает, хотя comboBox никто не трогает
 
Всем привет.
Сделал UserForm с несколькими элементами управления, в т.ч. comboBox'ами.
Идея была простая: при выборе пользователем значения из списка в первом combobox'е актуализируется источник данных для второго (RowSource), и т.д.
Но обнаружил странную вещь, которая портит всю логику.
При выборе значения из второго combobox'а используется обработчик события Change. Но он каким-то загадочным образом провоцирует аналогичное событие Change для первого combobox'а, хотя его никто не трогает.
Application.EnableEvents = False не помогает, упорно вызывается cbo1_Change и заканчивается ошибкой.
Можно было бы вставить On Error Resume Next, но хотелось бы обойтись без этого, т.к. это может привести к игнорированию настоящих ошибок.

закрытие формы (Terminate) тоже вызывает событие Change для combobox'ов и орет об ошибке. Если кто-то знает способ, как это обойти, буду благодарен

. Как показала пошаговая отладка, вызов события Change для ComboBox'а происходит в момент попытки применения автофильтра на листе, который никаким образом не имеет к этому ComboBox отношения. Не вижу в этом никакой логики :(

Буду благодарен за любую помощь.
 
Аналогично.
Никакой логики в этой абсолютно бесполезной писанине не просматривается.
 
Значит, имеет отношение. Показывать надо в примере
 
Прицепил файл.
Причина кроется в какой-то бесовщине с фильтрами в ListObject'ах. Мало того что они не срабатывают, еще и вызывают события комбобоксов.
 
Неправильно ты, Дядя Федор, бутерброд ешь!
Пока не поздно, выкиньте весь свой код, и начните заново.
Образец в файле.
 
Цитата
Alex K написал: Причина кроется в какой-то бесовщине с фильтрами
Цитата
RAN написал: Пока не поздно, выкиньте весь свой код
Вывод: бес - автор темы :)
 
Цитата
RAN написал:
Неправильно ты, Дядя Федор, бутерброд ешь!Пока не поздно, выкиньте весь свой код, и начните заново.
Спасибо. Я в принципе уже сам начал что-то подобное воротить, используя массивы вместо фильтров, все заработало как надо.
При этом так и осталось непонятным, почему фильтры так влияют на процесс, вызывают не связанные с ними события и ошибку 1004.
Самое умное, что я на эту тему нашел, это отключение EnableEvents и On Error Resume Next, но это же еще худшая бесовщина. :)
 
Цитата
vikttur написал:
Вывод: бес - автор темы
Ну я и не отрицаю  :cry:  
А что поделать, не было бы ошибок, зачастую глупых - не было бы смысла в этой теме.
То, что в первую очередь закидают чем ни попадя и обзовут, принимаю как данность Не зря зарегистрировался еще до своего рождения, опыт есть :)
 
Цитата
Alex K написал:
отключение EnableEvents
отключает реакцию системы на события книги (листа)
но никак не влияет на события возникающие в элементах форм
вписали соотв. процедуру в соотв. модуль - значит решили реагировать
удалите (закомментируйте) процедуру - и получите стандартную реакцию без ERROR 1004 и пр.
как только начнете понимать, что вы пишите в этих процедурах, - они тут же начнут работать потому что стандартно:
макрос делает не то, что вы хотели бы чтобы он делал, не то, что вы предполагали должно получиться,
макрос делает то, что в нем написано!
и между тем, что вы хотели, и тем, что написали, - может быть космическая разница (у меня точно так бывает, только я при этом не паникую, не рву волосы чуть по=ниже спины, не взываю к высшим силам, а ищу ошибки в своем коде и исправляю их)
единственный автор происходящей бесовщины с макросом - это программист, написавший код этого макроса
Изменено: Ігор Гончаренко - 14.01.2021 14:31:41
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх