【问题标题】:VBA change checkbox fill color when checked [closed]选中时VBA更改复选框填充颜色[关闭]
【发布时间】:2013-11-22 06:53:49
【问题描述】:

我有一个多工作表工作簿,其中有许多表单控件(不是 ActiveX)复选框。我正在寻找一些VBA,当它被选中(真)时,它会改变所有复选框的背景(填充)颜色。我已经看到了单个复选框的代码,但没有看到多个/所有框。我知道足够多的 VBA 是危险的,但我可以学习任何新的东西。

【问题讨论】:

  • I've seen code for a single checkbox 只需将该代码放在复选框的单击事件中的子使用中。为此,您必须使用Application.Caller

标签: forms excel checkbox vba


【解决方案1】:

关于我的 cmets,请参阅此示例。

CheckBox3Sheet1 中,CheckBox2Sheet2

Sub CheckBox3_Click()
    Dim actvWs As Worksheet
    Dim CB As String

    Set actvWs = ActiveSheet
    CB = Application.Caller

    ColorCB actvWs, CB

    '
    '~~> Rest of the code
    '
End Sub

Sub CheckBox2_Click()
    Dim actvWs As Worksheet
    Dim CB As String

    Set actvWs = ActiveSheet
    CB = Application.Caller

    ColorCB actvWs, CB

    '
    '~~> Rest of the code
    '
End Sub

Sub ColorCB(ws As Worksheet, Cbox As String)
    With ws.Shapes(Cbox)
        '~~> 13 is for Yellow, 1 is for White
        .Fill.ForeColor.SchemeColor = IIf(.ControlFormat.Value = xlOn, 13, 1)
        .Fill.Visible = msoTrue
    End With
End Sub

如果所有复选框的所有_Click() 都在同一个模块中,那么您可以将这两行移到模块顶部,这样您就不必在每个Sub 中声明它们。

Dim actvWs As Worksheet
Dim CB As String

【讨论】:

  • 不错的答案。如果有很多复选框,创建一个自定义类可能有意义,该类接受一个复选框With Events - 并在此处提供_Click 事件的代码。然后您只需将所有复选框分配给这些“包装器” - 并且只有一个 _Click 事件...
  • @PeterAlbert: 绝对:)
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多