如何在Excel中一次只打开一个切换按钮
我在excel 2010中创建了一个UserForm,并在其中添加了10个切换按钮。当我运行该表单时,所有表单都可以启用value=TRUE,但我只希望同时启用其中一个。如下所示: 在类模块中如何在Excel中一次只打开一个切换按钮,excel,vba,togglebutton,Excel,Vba,Togglebutton,我在excel 2010中创建了一个UserForm,并在其中添加了10个切换按钮。当我运行该表单时,所有表单都可以启用value=TRUE,但我只希望同时启用其中一个。如下所示: 在类模块中 Public WithEvents ToggleGroup As ToggleButton Private Sub ToggleGroup_click() ' code End Sub 以用户形式 Dim Buttons() As New Class1 Private Sub UserF
Public WithEvents ToggleGroup As ToggleButton
Private Sub ToggleGroup_click()
' code
End Sub
以用户形式
Dim Buttons() As New Class1
Private Sub UserForm_Initialize()
Dim ToggleCount As Integer
Dim Ctl As Control
For Each Ctl In UserForm1.Controls
If TypeName(Ctl) = "ToggleButton" Then
ReDim Preserve Buttons(1 To ToggleCount)
Set Buttons(ToggleCount).ToggleGroup = Ctl
End If
Next Ctl
End Sub
在模块中
Sub Form()
UserForm1.Show
End Sub
要使用切换按钮,可以尝试以下方法: 创建多个切换控件,并使用Tag属性对按钮进行分组。 下面的代码将比较每个控件的名称和标记。具有相同标记的所有切换按钮将与单击的按钮相反
Private Sub Toggle1_Click()
ToggleClick Me.ActiveControl
End Sub
Private Sub Toggle2_Click()
ToggleClick Me.ActiveControl
End Sub
Private Sub Toggle3_Click()
ToggleClick Me.ActiveControl
End Sub
Private Sub Toggle4_Click()
ToggleClick Me.ActiveControl
End Sub
Private Sub ToggleClick(ClickedControl As Control)
Dim Ctl As Control
For Each Ctl In Me.Controls
If TypeName(Ctl) = "ToggleButton" Then
If Ctl.Name <> ClickedControl.Name And Ctl.Tag = ClickedControl.Tag Then
Ctl.Value = Not ClickedControl.Value
End If
End If
Next Ctl
End Sub
Darren的答案很好,除了一个烦恼:当您设置切换控件的值时,Excel至少会触发_Click事件。恼人且不明显的我甚至称之为勘误表,如果不是一个彻底的错误,那么我将添加以下内容: 如果Me.ToggleControlName.Value=False,则添加该行,然后将Sub作为每个单击事件处理程序的第一行退出。 将条件和Ctl.Value=True添加到ToggleClick子例程的IF语句中,以防止额外触发_-Click事件,这些事件实际上不会更改toggle的值。如果为False,则无需将其设置为False,从而触发无用的_-Click事件处理程序。
即使经过埃里克的修改,我也无法得到达伦的答案。下面的行不断抛出错误
Ctl.Value = Not ClickedControl.Value
下面是一个简单的3个切换系统的简化版本
Private Sub ToggleButton1_Click()
If Me.ToggleButton1.Value = False Then Exit Sub
Me.ToggleButton2.Value = False
Me.ToggleButton3.Value = False
End Sub
Private Sub ToggleButton2_Click()
If Me.ToggleButton2.Value = False Then Exit Sub
Me.ToggleButton1.Value = False
Me.ToggleButton3.Value = False
End Sub
Private Sub ToggleButton3_Click()
If Me.ToggleButton3.Value = False Then Exit Sub
Me.ToggleButton1.Value = False
Me.ToggleButton2.Value = False
End Sub
唯一的缺点是我可以关闭当前活动的按钮,这样就没有活动的按钮。我想这样,如果你试图关闭活动的一个,它保持活跃。因此,一个按钮始终处于打开状态。在用户表单中:
Dim Buttons() As New Class1
Private Sub UserForm_Initialize()
Dim ToggleCount As Integer
Dim Ctl As Control
For Each Ctl In UserForm1.Controls
If TypeName(Ctl) = "ToggleButton" Then
ToggleCount = ToggleCount + 1
ReDim Preserve Buttons(1 To ToggleCount)
Set Buttons(ToggleCount).ToggleGroup = Ctl
Buttons(ToggleCount).CtlName = Ctl.Name
End If
Next Ctl
End Sub
在类模块中:
Public WithEvents ToggleGroup As ToggleButton
Public CtlName As String
Private Sub ToggleGroup_click()
' code
End Sub
Private Sub ToggleGroup_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim Ctl As Control
For Each Ctl In UserForm1.Controls
If TypeName(Ctl) = "ToggleButton" Then
If Not Ctl.Name = CtlName Then
Ctl.Value = False
End If
End If
Next Ctl
End Sub
已经有一段时间了,但是在每个选项按钮的首选项中,您不能将它们都设置为相同的组名,Excel将自动为您执行这些操作。@ScottCraner如何操作?你能给我举个例子吗。tanx选项按钮具有GroupName属性,如果在一个框架内,则连接选项-切换按钮没有此属性。找到了这个解释得很好的网站:从我上面的评论来看,你需要一个选项按钮而不是切换按钮。@Darren Bartrup Cook我需要切换按钮。不管怎样,我真的很喜欢这个。我不需要一个总是开着的额外限制。我只需要两个其他的正确清除时,一个是点击。我这样做是为了当B1被点击时,B2和B3的切换被清除,但是你仍然需要再次点击B1才能使其进入真实状态。这很有效。谢谢