VBA Excel切换button“locking”

我有以下代码对应于Excel中的VBA程序中的三个ToggleButtons。 当一个button被点击,它应该保持“按下”,另外两个button应该“释放”。 然而,在我使用的代码中,我必须点击一个buttonTWICE,一次释放其他button,另一个button保持按下。

但是,如果我将“ToggleButtonX.Value = True”添加到每个Subs,当单击一个button时,即使点击另一个button后也不能释放。 如何configuration这一点,以便当一个button点击一个button,button保持按下,其他button被释放?

编辑:我想保持TOGGLEBUTTONS。

Private Sub ToggleButton1_Click() ToggleButton2.Value = False ToggleButton3.Value = False End Sub Private Sub ToggleButton2_Click() ToggleButton1.Value = False ToggleButton3.Value = False End Sub Private Sub ToggleButton3_Click() ToggleButton1.Value = False ToggleButton2.Value = False End Sub 

通过调用ToggleButtonx.Value = False你可以模拟点击那个button,所以它自己的代码将会运行,并将你刚刚点击的button的值设置为false。

使用MouseDown事件:

 Private Sub ToggleButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ToggleButton2.Value = False ToggleButton3.Value = False End Sub Private Sub ToggleButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ToggleButton1.Value = False ToggleButton3.Value = False End Sub Private Sub ToggleButton3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ToggleButton1.Value = False ToggleButton2.Value = False End Sub 

除了Oliver的答案,这个答案可能更容易,更简洁,还有另外一种方法,通过使用只改变一个button被点击的其他两个button的值的逻辑。 其他buttonClick事件的代码将会触发,但是variablessButton将确定代码只会触发一个button被用户dynamic按下的button。

还要注意使用Not Me.ToggleButton1.Value 。 这将确保button2和3与button1相反, 每次点击 。 你编写代码的方式,无论被点击的button是True还是False ,总是会将其他button还原为False

 Option Explicit Public sButton As String Private Sub ToggleButton1_Click() ButtonLoad 1 End Sub Private Sub ToggleButton2_Click() ButtonLoad 2 End Sub Private Sub ToggleButton3_Click() ButtonLoad 3 End Sub Sub ButtonLoad(iButton As Integer) Select Case iButton Case 1 If sButton = "" Then sButton = "1" 'set so that other buttons don't trigger Me.ToggleButton2.Value = Not Me.ToggleButton1.Value Me.ToggleButton3.Value = Not Me.ToggleButton1.Value sButton = "" 'reset for next button click End If Case 2 If sButton = "" Then sButton = "2" Me.ToggleButton1.Value = Not Me.ToggleButton2.Value Me.ToggleButton3.Value = Not Me.ToggleButton2.Value sButton = "" End If Case 3 If sButton = "" Then sButton = "3" Me.ToggleButton2.Value = Not Me.ToggleButton3.Value Me.ToggleButton1.Value = Not Me.ToggleButton3.Value sButton = "" End If End Select End Sub 

这很容易通过选项button完成(如果这与您的其他实施工作)

 Private Sub OptionButton1_Click() OptionButton1.Value = True OptionButton2.Value = False OptionButton3.Value = False End Sub Private Sub OptionButton2_Click() OptionButton1.Value = False OptionButton2.Value = True OptionButton3.Value = False End Sub Private Sub OptionButton3_Click() OptionButton1.Value = False OptionButton2.Value = False OptionButton3.Value = True End Sub