VBA 用户表单多页中所有 ToggleButton 的一个颜色更改代码
VBA One color change code for all ToggleButtons in a Userforms' Multipage
大家好!
正如标题所说,我这里有一些切换按钮(大约 100 个)。
我想用它们做什么,
If .value = true then
togglebuttons.BackColor = vbRed
Else
= vbGreen
我可以通过为它们中的每一个编写代码来做到这一点,但是有没有办法创建一个组或 class 以便将颜色更改代码应用于所有这些?
我只是希望它看起来干净,如果可能的话,不要让每个按钮都有 100 个代码。
感谢您提供任何多汁的解决方案。
-Excel365
我已经很多年没有使用 VB 而它是 .net,所以,如果这个解决方案不正确,请告诉我。
解决方案 1:数组或列表
您可以创建一个 array or a list containing all your toggle buttons, loop them 并为它们中的每一个执行您需要的操作。这将确保上面的逻辑只执行一次而不是重复执行,但是,您仍然需要使用按钮构建您的集合。
解决方案 2:A class
您可以为切换按钮创建一个 subclass,并确保每个有问题的切换按钮都是 class。然后您可以为 class 创建一个静态列表。在每个切换按钮的构造函数中,您将该按钮附加到 class 中的共享列表。然后你可以创建一个循环列表并执行你需要的逻辑的共享方法。
P.S。抱歉没有写代码,我已经不记得语言的语法了。
下面是创建新 class 的示例,以便使用一个事件处理程序处理多个切换按钮。请注意,它假定您的多页控件的第一页包含您的切换按钮。相应地更改页面引用。
首先插入一个新的class模块(Insert >> Class Module),并命名为clsToggleButton。
然后将以下代码复制并粘贴到新 class 的代码模块中。 . .
Option Explicit
Public WithEvents toggleButton As MSForms.toggleButton
Private Sub toggleButton_Click()
With toggleButton
If .Value = True Then
.BackColor = vbRed
Else
.BackColor = vbGreen
End If
End With
End Sub
然后将以下代码复制并粘贴到您的用户窗体代码模块中。 . .
Option Explicit
Dim toggleButtonCollection As Collection
Private Sub UserForm_Initialize()
Set toggleButtonCollection = New Collection
Dim ctrl As MSForms.Control
Dim cToggleButton As clsToggleButton
For Each ctrl In Me.MultiPage1.Pages(0).Controls
If TypeName(ctrl) = "ToggleButton" Then
'ctrl.BackColor = vbGreen 'uncomment to initially set the backcolor to green
Set cToggleButton = New clsToggleButton
Set cToggleButton.toggleButton = ctrl
toggleButtonCollection.Add cToggleButton
End If
Next ctrl
End Sub
大家好!
正如标题所说,我这里有一些切换按钮(大约 100 个)。 我想用它们做什么,
If .value = true then
togglebuttons.BackColor = vbRed
Else
= vbGreen
我可以通过为它们中的每一个编写代码来做到这一点,但是有没有办法创建一个组或 class 以便将颜色更改代码应用于所有这些? 我只是希望它看起来干净,如果可能的话,不要让每个按钮都有 100 个代码。 感谢您提供任何多汁的解决方案。 -Excel365
我已经很多年没有使用 VB 而它是 .net,所以,如果这个解决方案不正确,请告诉我。
解决方案 1:数组或列表
您可以创建一个 array or a list containing all your toggle buttons, loop them 并为它们中的每一个执行您需要的操作。这将确保上面的逻辑只执行一次而不是重复执行,但是,您仍然需要使用按钮构建您的集合。
解决方案 2:A class
您可以为切换按钮创建一个 subclass,并确保每个有问题的切换按钮都是 class。然后您可以为 class 创建一个静态列表。在每个切换按钮的构造函数中,您将该按钮附加到 class 中的共享列表。然后你可以创建一个循环列表并执行你需要的逻辑的共享方法。
P.S。抱歉没有写代码,我已经不记得语言的语法了。
下面是创建新 class 的示例,以便使用一个事件处理程序处理多个切换按钮。请注意,它假定您的多页控件的第一页包含您的切换按钮。相应地更改页面引用。
首先插入一个新的class模块(Insert >> Class Module),并命名为clsToggleButton。
然后将以下代码复制并粘贴到新 class 的代码模块中。 . .
Option Explicit
Public WithEvents toggleButton As MSForms.toggleButton
Private Sub toggleButton_Click()
With toggleButton
If .Value = True Then
.BackColor = vbRed
Else
.BackColor = vbGreen
End If
End With
End Sub
然后将以下代码复制并粘贴到您的用户窗体代码模块中。 . .
Option Explicit
Dim toggleButtonCollection As Collection
Private Sub UserForm_Initialize()
Set toggleButtonCollection = New Collection
Dim ctrl As MSForms.Control
Dim cToggleButton As clsToggleButton
For Each ctrl In Me.MultiPage1.Pages(0).Controls
If TypeName(ctrl) = "ToggleButton" Then
'ctrl.BackColor = vbGreen 'uncomment to initially set the backcolor to green
Set cToggleButton = New clsToggleButton
Set cToggleButton.toggleButton = ctrl
toggleButtonCollection.Add cToggleButton
End If
Next ctrl
End Sub