Написал программу учета посещений своего учреждения. В ней форма ввода, в которой несколько раскрывающихся списков, после выбора в каждом из них значения по процедуре xxxxxx_Change (для каждого из списков) производятся некоторые действия. Затем после щелчка по кнопке "Добавить" данные переносятся в лист Excel, выполняющий функцию базы данных и поля ввода списков очищаются (но не сами списки, кроме одного) для ввода данных по новому клиенту. Для того, чтобы при очистке полей ввода не срабатывали события _Change и программа не уходила в бесконечный цикл или debug я в процедуру кнопки "Добавить" ввел такой код:
Private Sub Dobavit_Click()
' выключение перерисовки экрана (устранение мельканий экрана во время выполнения процедуры)
'Application.ScreenUpdating = False
........
' чтобы при очистке списков не срабатывали процедуры Change, отключаем выполнение откликов на события в полях ввода
Application.EnableEvents = False
' очистка полей ввода и раскрывающихся списков
UserForm2.Zal.Text = ""
UserForm2.Lgota.Text = ""
UserForm2.Kategoria.Clear
UserForm2.Terminal.Text = ""
UserForm2.Kolich.Text = ""
UserForm2.Stoim.Text = ""
' блокировка заполнения раскрывающихся списков и кнопки "Добавить" (это чтобы выполнялась определенная последовательность заполнения формы)
UserForm2.Lgota.Enabled = False
UserForm2.Kategoria.Enabled = False
UserForm2.Dobavit.Enabled = False
UserForm2.Terminal.Enabled = False
' включение перерисовки экрана
'Application.ScreenUpdating = True
' возвращаем срабатывание процедур Change
Application.EnableEvents = True
End Sub
Раскрывающийся список Kategoria очищается полностью, в остальных только поля ввода, но суть не в этом. По идее, после включения обработки событий в последней строке процедуры, никакого изменения в полях ввода раскрывающихся списков уже не происходит и поэтому очистка списков не приводит к повторной отработке событий _Change и уходу программы "в даун". Но это в теории. А на практике - один раз запущу программу, начинаю добавлять записи - все работает "как часики". Отойду на час-другой по делам, потом снова пробую ввести несколько пользователей - обработка событий почему-то перестает отключаться и при попытке добавления новой записи программа уходит в "debug". Не могу понять почему - то ли солнце на небосводе сдвинулось, то ли магнитное поле планеты изменилось или ещё что-нибудь?
Может дело в каких-то недокументированных "фишках" VBA for Excel? Помогите пожалуйста.
Private Sub Dobavit_Click()
' выключение перерисовки экрана (устранение мельканий экрана во время выполнения процедуры)
'Application.ScreenUpdating = False
........
' чтобы при очистке списков не срабатывали процедуры Change, отключаем выполнение откликов на события в полях ввода
Application.EnableEvents = False
' очистка полей ввода и раскрывающихся списков
UserForm2.Zal.Text = ""
UserForm2.Lgota.Text = ""
UserForm2.Kategoria.Clear
UserForm2.Terminal.Text = ""
UserForm2.Kolich.Text = ""
UserForm2.Stoim.Text = ""
' блокировка заполнения раскрывающихся списков и кнопки "Добавить" (это чтобы выполнялась определенная последовательность заполнения формы)
UserForm2.Lgota.Enabled = False
UserForm2.Kategoria.Enabled = False
UserForm2.Dobavit.Enabled = False
UserForm2.Terminal.Enabled = False
' включение перерисовки экрана
'Application.ScreenUpdating = True
' возвращаем срабатывание процедур Change
Application.EnableEvents = True
End Sub
Раскрывающийся список Kategoria очищается полностью, в остальных только поля ввода, но суть не в этом. По идее, после включения обработки событий в последней строке процедуры, никакого изменения в полях ввода раскрывающихся списков уже не происходит и поэтому очистка списков не приводит к повторной отработке событий _Change и уходу программы "в даун". Но это в теории. А на практике - один раз запущу программу, начинаю добавлять записи - все работает "как часики". Отойду на час-другой по делам, потом снова пробую ввести несколько пользователей - обработка событий почему-то перестает отключаться и при попытке добавления новой записи программа уходит в "debug". Не могу понять почему - то ли солнце на небосводе сдвинулось, то ли магнитное поле планеты изменилось или ещё что-нибудь?
Может дело в каких-то недокументированных "фишках" VBA for Excel? Помогите пожалуйста.