让用户仅在条件(VBA)下更改所选的OptionButton

时间:2018-12-20 13:09:07

标签: excel vba userform

在Excel中,我有一个带有两个OptionButton的UserForm。如果用户在Option1上轻按,则应检查条件,并在满足条件的情况下选择Option1,应取消选择Option2,并应执行CommandButton2_Click功能。

如果用户单击Option2,则应该相反。

如果不满足条件,则在所有情况下都不会发生任何事情。条件取决于是/否用户输入。

我无法实现此行为。当前,我使用“ OptionButton2_BeforeUpdate”-方法。我希望通过此条件先检查条件,以防万一,然后更改OptionButtons Selection。但是,看起来似乎在BeforeUpdate-Method开始之前先更改选择状态。

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 :(得分:0)

仅需要if语句来根据您的条件决定是否选中此复选框:

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 if语句。


编辑:

为什么不使用以下内容:

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

然后,在选项按钮上使用“标记”,这样,在选项按钮单击时,您可能会选择是/否:

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

答案 1 :(得分:0)

我不确定您其余的代码是什么,但是我只是根据需要设置按钮的值?

希望这会有所帮助,或者至少会让您对下一步有所了解。

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

答案 2 :(得分:0)

我找到了可行的解决方案。不好,但是可以满足我的要求。

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