Почему мои флажки не работают, когда я пытаюсь запустить пользовательскую форму с помощью кнопки на листе, и работают, когда я запускаю пользовательскую форму из главного меню? - PullRequest
0 голосов
/ 20 марта 2020

В настоящее время я работаю над небольшим проектом в VBA, поэтому я создал UserForm с двумя флажками, и я написал 2 подпрограммы, соответствующие этим флажкам, чтобы убедиться, что только один из флажков может быть установлен. Вот код 2-х флажков:

Private Sub CheckBox2_Click()
    If CheckBox2.Value = True And CheckBox3.Value = True Then
        CheckBox3.Value = False
        TextBox8.Enabled = True
        TextBox8.BackColor = RGB(255, 255, 255)
    Else
        CheckBox3.Value = False
        CheckBox2.Value = True    
    End If
End Sub

Private Sub CheckBox3_Click()
    If CheckBox3.Value = True And CheckBox2.Value = True Then
        CheckBox2.Value = False
        TextBox8.Enabled = False
        TextBox8.BackColor = RGB(205, 205, 205)
    Else
        CheckBox2.Value = False
        CheckBox3.Value = True
        TextBox8.Enabled = False
    End If
End Sub

Как вы уже видели, подпрограммы также включают / отключают поле TextBox, учитывая установленный флажок.

Этот код отлично работает, когда я пытаюсь чтобы запустить пользовательскую форму из главного меню с помощью кнопки «Выполнить»: если вы установите флажок, другой будет снят.

Я также создаю на первом листе моего файла Excel кнопку, запускающую пользовательскую форму Таким образом, пользователю не нужно будет активировать меню разработчика, чтобы запустить его. Вот подпункт, прикрепленный к этой кнопке:

Private Sub lance_interface()
    UF.Show
End Sub

Когда я нажимаю на эту кнопку, появляется пользовательская форма, но как только флажок установлен, невозможно установить другой флажок, чтобы снять первый : первый проверяется.

Я надеюсь, что моя проблема ясно объяснена, заранее спасибо за вашу помощь и извините за мои действия.

1 Ответ

1 голос
/ 20 марта 2020

Вам необходимо отключить события в вашей пользовательской форме. В вашем случае это может выглядеть так:

Option Explicit
Dim eventOn As Boolean
Private Sub CheckBox2_Click()
    If eventOn Then
        eventOn = False
        If CheckBox2.Value = True And CheckBox3.Value = True Then
            CheckBox3.Value = False
            TextBox8.Enabled = True
            TextBox8.BackColor = RGB(255, 255, 255)
        Else
            CheckBox3.Value = False
            CheckBox2.Value = True
        End If
        eventOn = True
    End If
End Sub

Private Sub CheckBox3_Click()
    If eventOn Then
        eventOn = False
        If CheckBox3.Value = True And CheckBox2.Value = True Then
            CheckBox2.Value = False
            TextBox8.Enabled = False
            TextBox8.BackColor = RGB(205, 205, 205)
        Else
            CheckBox2.Value = False
            CheckBox3.Value = True
            TextBox8.Enabled = False
        End If
        eventOn = True
    End If

End Sub

Private Sub UserForm_Initialize()
    eventOn = True
End Sub

Для дальнейшего прочтения посмотрите статью ChipPearson об изменениях Surpress в формах или disabling-events-in-userforms

...