VBA Excel切换按钮“锁定”
下面的代码对应于Excel中VBA程序中的三个切换按钮。单击一个按钮时,应保持按下状态,其他两个按钮应松开。然而,使用我的代码,我必须点击一个按钮两次,一次释放其他按钮,另一次保持原来的按钮按下 但是,如果我将ToggleButtonX.Value=True添加到每个子按钮中,当单击一个按钮时,即使在单击另一个按钮后,它也无法释放。我们如何配置它,以便在单击一个按钮时,该按钮保持按下状态,其他按钮释放 编辑:我想保持切换按钮VBA Excel切换按钮“锁定”,vba,excel,vbscript,Vba,Excel,Vbscript,下面的代码对应于Excel中VBA程序中的三个切换按钮。单击一个按钮时,应保持按下状态,其他两个按钮应松开。然而,使用我的代码,我必须点击一个按钮两次,一次释放其他按钮,另一次保持原来的按钮按下 但是,如果我将ToggleButtonX.Value=True添加到每个子按钮中,当单击一个按钮时,即使在单击另一个按钮后,它也无法释放。我们如何配置它,以便在单击一个按钮时,该按钮保持按下状态,其他按钮释放 编辑:我想保持切换按钮 Private Sub ToggleButton1_Click()
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
如果选项按钮在实现的其余部分起作用,则可以很容易地完成此操作
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
如果选项按钮在实现的其余部分起作用,则可以很容易地完成此操作
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
通过调用ToggleButtonx.Value=False,您正在模拟单击该按钮,因此它自己的代码将运行,并将您刚才单击的按钮的值设置为False
改为使用MouseDown事件:
通过调用ToggleButtonx.Value=False,您正在模拟单击该按钮,因此它自己的代码将运行,并将您刚才单击的按钮的值设置为False
改为使用MouseDown事件:
除了可能更容易和更干净地实现的之外,还有另一种方法可以实现,即使用仅在单击一个按钮时更改其他两个按钮的值的逻辑。其他按钮单击事件的代码将触发,但变量sButton将确定代码将仅在用户实际按下的按钮上触发
还要注意Not Me.ToggleButton1.Value的用法。这将确保每次单击时按钮2和3与按钮1相对。按照编写代码的方式,无论单击的按钮是True还是False,它都会将其他按钮还原为False
除了可能更容易和更干净地实现的之外,还有另一种方法可以实现,即使用仅在单击一个按钮时更改其他两个按钮的值的逻辑。其他按钮单击事件的代码将触发,但变量sButton将确定代码将仅在用户实际按下的按钮上触发
还要注意Not Me.ToggleButton1.Value的用法。这将确保每次单击时按钮2和3与按钮1相对。按照编写代码的方式,无论单击的按钮是True还是False,它都会将其他按钮还原为False
为什么不使用选项按钮而不是切换按钮?它们的功能是完全可靠的。不可靠的原因是每次更改切换按钮的值时,VBA都会将其视为单击,并触发单击事件,因此每次都会触发每段代码。那么,我该如何解决这个问题?我想将其保留为ToggleButton驱动程序很可能有以下答案。为什么不使用选项按钮而不是切换按钮?它们的功能是完全可靠的。不可靠的原因是每次更改切换按钮的值时,VBA都会将其视为单击,并触发单击事件,因此每次都会触发每段代码。那么,我该如何解决这个问题?我想将其保留为ToggleButton驱动程序很可能有以下答案。这将设置其他按钮为false not clicked,无论原始按钮是否为true或false clicked。这将设置其他按钮为false not clicked,无论原始按钮是否为true或false clicked。
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