在Excel中组400 ToggleButtons并仅分配1个VBA代码

时间:2016-12-27 20:19:10

标签: vba excel-vba excel

这就是我需要的: 我有一个切换按钮。我在Sheet1中写了一个小的VBA代码,使这个按钮变为绿色并显示标题" G"按下时,或转为黄色并显示标题" Y"郁闷的时候效果很好。

但我在Sheet1上有400个我需要应用此代码。我不知道如何使用UserForm,我无法弄清楚宏,手动输入代码既乏味又损坏了我的所有ComboBox条目。

Sub ToggleButton1_Click()
    If ToggleButton1.Caption = “G” Then
        ToggleButton1.Caption = "Y"
    Else
        ToggleButton1.Caption = "G"
    End if
    If ToggleButton1.Value = True Then
        ToggleButton1.BackColor = vbGreen
    Else
        ToggleButton1.BackColor = vbYellow
    End If
End Sub

我知道我刚刚输入的代码看起来很邋(我甚至不知道如何使用该论坛的格式)。但是任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我的建议是创建一个类模块,将其命名为clsToggle

Option Explicit

Public WithEvents TGButton As ToggleButton

Private Sub TGButton_Click()
    With TGButton
        If .Caption = "G" Then
            .Caption = "Y"
        Else
            .Caption = "G"
        End If
        If .Value = True Then
            .BackColor = vbGreen
        Else
            .BackColor = vbYellow
        End If
    End With

End Sub

然后在普通模块中添加以下代码

Option Explicit

Dim TBTs() As New clsToggle

Sub Init_ToggleButtons()

Dim obj As OLEObject
Dim TGCount As Integer
    TGCount = 0

    For Each obj In ActiveSheet.OLEObjects
        If TypeOf obj.Object Is ToggleButton Then
            TGCount = TGCount + 1
            ReDim Preserve TBTs(1 To TGCount)
            Set TBTs(TGCount).TGButton = obj.Object
        End If
    Next

End Sub

运行Sub Init_ToggelButtons,所有Togglebuttons将对类模块中定义的click事件做出反应。 当然,请删除您可能已经为togglebuttons定义的代码。

编辑:每次打开工作簿时都需要运行Init_ToggelButtons。所以最好在模块中添加以下子

Sub Auto_open()
    Init_ToggleButtons
End Sub