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