Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel切换按钮“锁定”_Vba_Excel_Vbscript - Fatal编程技术网

VBA Excel切换按钮“锁定”

VBA Excel切换按钮“锁定”,vba,excel,vbscript,Vba,Excel,Vbscript,下面的代码对应于Excel中VBA程序中的三个切换按钮。单击一个按钮时,应保持按下状态,其他两个按钮应松开。然而,使用我的代码,我必须点击一个按钮两次,一次释放其他按钮,另一次保持原来的按钮按下 但是,如果我将ToggleButtonX.Value=True添加到每个子按钮中,当单击一个按钮时,即使在单击另一个按钮后,它也无法释放。我们如何配置它,以便在单击一个按钮时,该按钮保持按下状态,其他按钮释放 编辑:我想保持切换按钮 Private Sub ToggleButton1_Click()

下面的代码对应于Excel中VBA程序中的三个切换按钮。单击一个按钮时,应保持按下状态,其他两个按钮应松开。然而,使用我的代码,我必须点击一个按钮两次,一次释放其他按钮,另一次保持原来的按钮按下

但是,如果我将ToggleButtonX.Value=True添加到每个子按钮中,当单击一个按钮时,即使在单击另一个按钮后,它也无法释放。我们如何配置它,以便在单击一个按钮时,该按钮保持按下状态,其他按钮释放

编辑:我想保持切换按钮

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