【问题标题】:Return CheckBoxes.LinkedCell address VBA返回 CheckBoxes.LinkedCell 地址 VBA
【发布时间】:2017-01-26 13:16:51
【问题描述】:

我使用以下代码自动生成一个新的复选框并将一个单元格链接到它:

ActiveSheet.CheckBoxes.Add().LinkedCell = Selection.Address

我想创建另一个sub,当复选框被选中(蓝色)或未选中(红色)时,它应该更改复选框的.LinkedCell 单元格的背景颜色。我将在工作表中有大约 200 个复选框。

有没有办法获取/返回当前选中/未选中复选框的.LinkedCell 地址,以便sub 可以更改该单元格的背景颜色?

例如,假设.LinkedCell 是最初放置复选框的单元格。这将是每个复选框的初始状态:

这将是用户选中/取消选中复选框后的结果:

到目前为止,我使用此代码来更改复选框本身的背景颜色。但我不想这样,我想改变.LinkedCell的颜色。

Sub SetMacro()
    Dim cb
    For Each cb In ActiveSheet.CheckBoxes
        If cb.OnAction = "" Then cb.OnAction = "CheckedUnchecked"
    Next cb
End Sub

Sub CheckedUnchecked()
    With ActiveSheet.Shapes(Application.Caller).DrawingObject
        If .Value = 1 Then
            .Interior.ColorIndex = 5
        Else
            .Interior.ColorIndex = 3
        End If
    End With
End Sub

【问题讨论】:

  • 我不确定您所说的“当前选中/未选中复选框”是什么意思?您在寻找活动吗?
  • (a) 您能否根据单元格是TRUE 还是FALSE 有条件地格式化单元格?
  • (b) 你有链接到 CheckBox 的 Click 事件的代码吗?如果是这样,您应该可以只使用 CheckBox 的 .LinkedCell 属性,然后将该单元格的背景颜色设置为您喜欢的任何颜色。
  • @YowE3K 谢谢你非常聪明的一点(a):) 我详细解释了。尽管如此,我还是想通过某种点击事件来做到这一点......不确定它是如何工作的,但想学习和理解
  • Re (a) - 如果=TRUE,您可以使用 CF 将其设置为蓝色,如果=AND(cell<>"",cell=FALSE),则设置为红色

标签: vba excel checkbox


【解决方案1】:

您可以使用以下代码替换您的 CheckedUnchecked 代码:

Sub CheckedUnchecked()
    With ActiveSheet.Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell)
        If .Value Then
            .Interior.ColorIndex = 5
        Else
            .Interior.ColorIndex = 3
        End If
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 2014-11-03
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多