自动工作表计算(复选框链接到单元格)

时间:2019-09-05 07:34:08

标签: excel vba

我正在处理一个表,其中插入了一些复选框(窗体控件),这些复选框链接到在选中任何一个复选框时返回True或False的单元格。 我编写了一个代码,该代码应根据返回的值更改单元格的颜色。 该代码可以正常工作,但仅当我双击该单元格并按Enter进行验证时,或者当我通过按F5或单击一个按钮运行Sub时,该代码才能正常工作。 (我使用了类似的代码来自动更新另一个项目中的所有内容,但在这里似乎不起作用)

一旦选中复选框,如何使Sub自动运行(或更新工作表)?

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("A2:Q21"), Range(Target.Address)) Is Nothing Then

        Dim cell As Range

        For Each cell In ActiveWorkbook.Sheets("Sheet1").Range("A2:Q21")

            If cell.Value = "True" Then
                cell.Interior.Color = vbGreen
            ElseIf cell.Value = "False" Then
                cell.Interior.Color = vbRed
            End If
        Next
End Sub

我知道我可以使用条件格式,但是此工作表将迅速扩展,我看不到自己会复制粘贴数百个复选框

随着工作表的扩展,我认为最好包含“ lastRow”语句,因为我将使用UserForm在底部添加新行

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该将进行着色的部分提取到新函数中,并从原始函数和复选框的事件处理程序中调用它。

' In Sheet1 Module

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("A2:Q21"), Range(Target.Address)) Is Nothing Then
        ColorCells
    End If
End Sub


' In Module1 Module

Sub CheckBox1_Click()
    ColorCells
End Sub

Public Sub ColorCells()
    Dim cell As Range

    For Each cell In ActiveWorkbook.Sheets("Sheet1").Range("A2:Q21")

        If cell.Value = "True" Then
            cell.Interior.Color = vbGreen
        ElseIf cell.Value = "False" Then
            cell.Interior.Color = vbRed
        End If
    Next
End Sub

更新

如果复选框太多,则可以使用工作表的“计算”事件处理程序,前提是该复选框具有“链接的单元格”,而其他一些“单元格”引用了它们的值。

' In Sheet1 Module

Private Sub Worksheet_Calculate()
    ColorCells
End Sub

请注意,如果该复选框没有链接的单元格,它将无法使用。如果该复选框具有“链接的单元格”,但未被其他任何单元格引用,则该复选框将无法使用。这是因为在这些情况下,不会重新计算。

您可以测试以下内容:将A1分配给一个复选框(在新表上),并尝试运行宏(不应),然后写A2 =2*--A1,然后再次检查,现在应该可以了。

如果要最大程度地减少此要求的占用空间,请在工作表上找到一个未使用的单元格,然后输入以下公式:=INDEX(1:1048576,1,1)。这是指所有单元格,但不需要冗长的计算。当然,如果要将其放入A1,则应将,1,1部分更改为其他内容,以避免循环引用。

答案 1 :(得分:0)

不要在Worksheet_Change处启动着色子,而是将其放在Worksheet_Calculate下。然后在工作表的某处插入公式=A1:Q21(或覆盖范围的任何内容)。它将解析为#value,但这并不重要。此公式将强制您的工作表在其范围内的任何内容(包括链接到您的复选框的单元格)发生更改时自动重新计算。然后重新计算后,它将触发为您的单元格正确着色的子程序。