2013-10-27 6 views
1

У меня возникли проблемы с Excel VBA UserForm События в Office Excel 2013 следующим образомExcel VBA UserForm enableevents

  1. Простой UserForm с тремя флажками (CB1,2,3) и две кнопки Отмена и ОК
  2. При проверке СВ1 установить Cb3 = ложный
  3. При проверке СВ2 установить Cb3 = ложный
  4. При проверке СВ3 установить CB1 = ложную и CB2 = ложный

Я прочитал и понял http://www.cpearson.com/excel/SuppressChangeInForms.htm относительно подавления событий UserForm и расстался с ними ...

В приведенном выше списке выше приведенных выше 2. и 3. корректно выполняются коды (см. Ниже), а не-события запускаются для CB3. Однако, когда я делаю 4. Проверьте CB3 - он запускает события для CB1 и CB2, даже если я установил, чтобы он не срабатывал.

Любая помощь с благодарностью получил,

С наилучшими пожеланиями

Seán

Код:

Public EnableEvents As Boolean 
Private Sub UserForm_Initialize() 

    Me.EnableEvents = True 

End Sub 

Private Sub vboInputsSelected_Click() 

    Me.EnableEvents = False 
    vboPracticesSelected.value = False   'this line does NOT fire an event 
    Me.EnableEvents = True 

End Sub 

Private Sub vboOutputsSelected_Click() 

    Me.EnableEvents = False 
    vboPracticesSelected.value = False   'this line does NOT fire an event 
    Me.EnableEvents = True 

End Sub 

Private Sub vboPracticesSelected_Click() 

    Me.EnableEvents = False 
    vboInputsSelected.value = False   'this line DOES fire an event 
    vboOutputsSelected.value = False   'this line DOES fire an event 
    Me.EnableEvents = True 

End Sub 
+0

Не нужно ли устанавливать каждое значение флажка вместо того, чтобы просто присваивать объект true или false? – NickSlash

+0

Спасибо, хороший, я изменил код, чтобы быть правильным: с .value на конце (vboInputsSelected.value = False), и он STILL запускает событие, когда EnableEvents является ложным – Sean

ответ

2

Это хорошо работает для меня. If выручает, когда происходит событие. Поймите, что переменная EnableEvents не делает ничего для предотвращения событий. Это всего лишь логическое значение, которое вы создали. Вам нужно проверить это, прежде чем разрешить событие, чтобы оно ничего не делало.

Public EnableEvents As Boolean 

Private Sub vboInputsSelected_Click() 
    If Not EnableEvents Then Exit Sub 

    Me.EnableEvents = False 
    vboPracticesSelected.Value = False 
    Me.EnableEvents = True 
End Sub 

Private Sub vboOutputsSelected_Click() 
    If Not EnableEvents Then Exit Sub 

    Me.EnableEvents = False 
    vboPracticesSelected.Value = False 
    Me.EnableEvents = True 
End Sub 

Private Sub vboPracticesSelected_Click() 
    If Not EnableEvents Then Exit Sub 

    Me.EnableEvents = False 
    vboInputsSelected.Value = False 
    vboOutputsSelected.Value = False 
    Me.EnableEvents = True 
End Sub 
+0

Да, это способ сделать это , спасибо – Sean

+0

Если вы хотите, чтобы всегда был выбран ящик, вы можете установить для каждого поля значение true внутри своего собственного события «Click» (между «EnabledEvents»), и всегда будет одно истинное поле. – usncahill

Смежные вопросы