Всем доброй ночи! Прошу помочь разобраться с такой проблемой: Имеются две формы, на первой выбирается действие, во второй это действие выполняется (в моем случае добавление ФИО и № телефона, редактирование введенных данных и удаление не нужных). К процедуре ввода данных вопросов нет, а, вот, при редактировании данных и попытке их сохранения, после добавления трех значений, выполнение программы перебрасывается на процедуры всех объектов формы не имеющие непосредственного отношения к сохранению отредактированных данных, после чего возвращается к этой процедуре, потом опять переходит на объекты формы и так несколько раз. Как можно решить данную проблему? Файл с примером прилагаю.
Прошу прощения за ошибку в название темы. Должно было быть "Почему выполняется код не имеющий отношение к конкретной процедуре?"
Всем доброй ночи! Прошу помочь разобраться с такой проблемой: Имеются две формы, на первой выбирается действие, во второй это действие выполняется (в моем случае добавление ФИО и № телефона, редактирование введенных данных и удаление не нужных). К процедуре ввода данных вопросов нет, а, вот, при редактировании данных и попытке их сохранения, после добавления трех значений, выполнение программы перебрасывается на процедуры всех объектов формы не имеющие непосредственного отношения к сохранению отредактированных данных, после чего возвращается к этой процедуре, потом опять переходит на объекты формы и так несколько раз. Как можно решить данную проблему? Файл с примером прилагаю.
Прошу прощения за ошибку в название темы. Должно было быть "Почему выполняется код не имеющий отношение к конкретной процедуре?"vigl
[/vba] Когда происходит изменение ячейки, входящей в "RowSource", у ListBox'а запускается событие "Click". Варианты решения: 1) не используйте свойство "RowSource", а придумайте что-нибудь другое 2) можно сделать модульную переменную и назвать ее "boolEnableEvents". В том месте кода, где происходит самопроизвольный запуск процедур, записывайте в переменную "boolEnableEvents = False", а в начале запускаемых процедур проверяйте, что находится в переменной "boolEnableEvents": если False, то делайте выход из процедуры, если True, то пусть процедура выполняется. При запуске формы записывайте в переменную "boolEnableEvents = True". В Вашем макросе я поставил отключение/включение событий в двух местах. Сделайте в остальных местах по такому же принципу.
У Вас используется свойство "RowSource": [vba]
Код
With lstFIO .RowSource = "$A$2:" + m End With
[/vba] Когда происходит изменение ячейки, входящей в "RowSource", у ListBox'а запускается событие "Click". Варианты решения: 1) не используйте свойство "RowSource", а придумайте что-нибудь другое 2) можно сделать модульную переменную и назвать ее "boolEnableEvents". В том месте кода, где происходит самопроизвольный запуск процедур, записывайте в переменную "boolEnableEvents = False", а в начале запускаемых процедур проверяйте, что находится в переменной "boolEnableEvents": если False, то делайте выход из процедуры, если True, то пусть процедура выполняется. При запуске формы записывайте в переменную "boolEnableEvents = True". В Вашем макросе я поставил отключение/включение событий в двух местах. Сделайте в остальных местах по такому же принципу.Karataev
перебрасывается на процедуры всех объектов формы не имеющие непосредственного отношения к сохранению отредактированных данных
как Вы это определили? Я шибко не разбирался в коде, но возможно, Вы грешите на возникновение событийных процедур, которые, естественно, возникают после "необходимого" события?
перебрасывается на процедуры всех объектов формы не имеющие непосредственного отношения к сохранению отредактированных данных
как Вы это определили? Я шибко не разбирался в коде, но возможно, Вы грешите на возникновение событийных процедур, которые, естественно, возникают после "необходимого" события?Roman777
очень просто: ставим точку останова и запускаем программу на выполнение и смотрим, что происходит, а происходит следующее: еще до конца программного кода, выполнение передается другим объектам формы и после выполнения программ всех объектов, выполнение программного кода продолжается, потом опять идет переброс на выполнения кодов объектов формы, потом опять возвращается и так до самого конца.
очень просто: ставим точку останова и запускаем программу на выполнение и смотрим, что происходит, а происходит следующее: еще до конца программного кода, выполнение передается другим объектам формы и после выполнения программ всех объектов, выполнение программного кода продолжается, потом опять идет переброс на выполнения кодов объектов формы, потом опять возвращается и так до самого конца.vigl
Сообщение отредактировал vigl - Суббота, 17.02.2018, 11:56