Разрешение пользователю изменять выбранную OptionButton только при условии (VBA) - PullRequest
0 голосов
/ 20 декабря 2018

В Excel у меня есть пользовательская форма с двумя кнопками Option.Если пользователь нажимает на Option1, условие должно быть проверено, и если оно выполнено, следует выбрать Option1, следует отменить выбор Option2 и выполнить функцию CommandButton2_Click.

Если пользователь нажимает на Option2, все должно быть наоборот.

Если условие не выполняется, во всех случаях ничего не должно происходить.Условие зависит от пользовательского ввода да / нет.

Мне не удается добиться такого поведения.В настоящее время я использую метод OptionButton2_BeforeUpdate.Я надеялся сначала проверить это условие и, если оно выполнено, затем изменить OptionButtons Selection.Однако, похоже, что состояние выбора изменяется первым до того, как метод BeforeUpdate получит старт.

Private Sub OptionButton2_BeforeUpdate(ByVal Cancel As     MSForms.ReturnBoolean)
If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
    CommandButton2_Click
Else
    Cancel = True
End If
End Sub

Private Sub OptionButton1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
    CommandButton2_Click
Else
    Cancel = True
End If
End Sub

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Я не уверен, что представляет собой остальная часть вашего кода, но я бы просто установил значение кнопки, как мне хочется?

Надеюсь, это поможет или, по крайней мере, даст вам идею для следующего шага.

Private Sub OptionButton1_Click()
    If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
        CommandButton2_Click
        Me.OptionButton2.Value = False
    Else
        Me.OptionButton1.Value = False
    End If
End Sub

Private Sub OptionButton2_Click()
    If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
        CommandButton2_Click
        Me.OptionButton1.Value = False
    Else
        Me.OptionButton2.Value = False
    End If
End Sub
0 голосов
/ 20 декабря 2018

Я нашел рабочее решение.Это не хорошо, но делает то, что я хочу.

Public Mark As Integer

Private Sub OptionButton1_Click()
    If Mark = 1 Then
        Mark = 0
    Else
        If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
            CommandButton2_Click
            OptionButton1.Value = True
        Else
            Mark = 1
            OptionButton2.Value = True
        End If
    End If
End Sub

Private Sub OptionButton2_Click()
    If Mark = 1 Then
        Mark = 0
    Else
        If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
            CommandButton2_Click
            OptionButton2.Value = True
        Else
            Mark = 1
            OptionButton1.Value = True
        End If
    End If
End Sub
0 голосов
/ 20 декабря 2018

Должно просто потребоваться, чтобы оператор диктовал, установлен ли флажок или нет в зависимости от ваших условий:

Private Sub OptionButton1_Click() 'note that this is in the click, you don't need beforeupdate 
    If MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?") = vbYes Then
        Me.OptionButton1.Value = True
    Else
        Me.OptionButton1.Value = False
    End If
End Sub

Редактировать: Включен ваш фактический msgbox, еслизаявление.


Редактировать:

Почему бы не использовать что-то вроде:

Public mark As String

Private Sub UserForm_Initialize()
    mark = MsgBox("Achtung, durch Wechsel der Getriebeart wird die Auswahl zurückgesetzt! Trotzdem wechseln?", vbYesNo + vbQuestion, "Auswahl zurücksetzen?")
End Sub

Затем вы используете «mark» для своих кнопок выбора, икак таковой, у вас будет случай либо да / нет, при нажатии кнопки опции:

Select Case mark
    Case vbYes
        Me.OptionButton1.Value = True
        Me.OptionButton2.Value = False
    Case vbNo
        Me.OptionButton1.Value = False
        Me.OptionButton2.Value = True
End Select
...