【发布时间】:2021-02-09 19:56:08
【问题描述】:
我有一个函数可以计算某个范围内具有特定颜色的单元格的数量,并且效果很好。但是,如果我更改该单元格的颜色,该函数不会更新计数。只有当我将文本放入另一个单元格并按 Enter 时,该功能才会运行。
我想自动化它,以便如果发生更改,函数会运行并更新计数。我知道 Worksheet_Change 事件将是要走的路线,但我不确定如何实现它。例如,如果我应该将它包装在一个 sub 中,或者如果我有一个运行该函数的 sub。任何见解将不胜感激。
这里是vba函数:
Function Color_Cell_Count(ColorCell As Range, DataRange As Range)
Dim Data_Range As Range
Dim Cell_Color As Long
Cell_Color = ColorCell.Interior.ColorIndex
For Each Data_Range In DataRange
If Data_Range.Interior.ColorIndex = Cell_Color Then
Color_Cell_Count = Color_Cell_Count + 1
End If
Next Data_Range
End Function
更新 - 使用更多的 Google fu,我发现 excel 不会计算单元格颜色变化,因此该函数不会运行。要解决这个问题,您可以创建一个事件侦听器来监视一系列单元格,如果完成更改,它会运行该函数。该信息来自 2002 年,因此我希望 Excel 或 VBA 从那时起有所改进。
【问题讨论】:
-
使用我认为的
SelectionChange事件。当您更改单元格的颜色时,Change事件不会触发。 -
@BigBen 感谢您的回复。我会在哪里使用这个?
-
在工作表代码模块中。
-
@BigBen 我知道它在一个模块中。我不确定如何在模块中实现它。
-
这里有一个教程:brainbell.com/excel/worksheet-change-selectionchange.html 因此,例如,如果您想计算 B2:B100 中与 B1 的颜色相匹配的颜色,只要单击 B1:B100 中的单元格,您可以右键单击工作表选项卡并选择查看代码,然后将其设为
Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Not Intersect(Target, Range("B1:B100")) Is Nothing ThenRange("B1").Value = Color_Cell_Count(Range("B1"), Range("B2:B100"))End IfEnd Sub