所以我在excel中有一个函数,基本上可以计算出有多少个黄色单元格。
Function CountColorIf(rArea As Range) As Long
Dim rAreaCell As Range
Dim lCounter As Long
For Each rAreaCell In rArea
If rAreaCell.Interior.ColorIndex = 6 Then
lCounter = lCounter + 1
End If
Next rAreaCell
CountColorIf = lCounter
End Function
代码可以工作,但不是立即...所以,例如说我将两个单元格设为黄色,然后我必须单击返回放置此功能的单元格,然后按Enter键以显示正确的数字。
任何人都可以告诉我如何制作它,以便在工作表发生变化时运行吗?
我确实找到了关于Worksheet.event的东西(对不起那样的东西)但是从我的理解中只能使用sub而不是函数。
任何帮助都会非常有用!
干杯
萨姆
答案 0 :(得分:1)
您可以将您的功能标记为Volatile
,以便每次更改时都会重新调整。这可能是CPU密集型的,因为即使输入数字也会导致它运行。
Application.Volatile (True)
答案 1 :(得分:0)
编辑:这对你不起作用
原因:更改单元格的内部颜色不会触发worksheet_change事件。我为这个虚假的希望感到抱歉。我将保留答案以消除您对工作表更改事件的疑虑,但它不适用于您的情况。
除了Application.Volatile之外,还有Worksheet_Change事件。只要工作表发生变化,它就会启动。我把一些东西转到了它,所以如果你的电子表格很大,它需要更少的资源。
为了工作,需要将其粘贴到工作表的代码中(而不是模块)。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng as Range
Application.enableevents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If Not Intersect(Target, Sheet1.Cells) Is Nothing Then
set rng = ActiveCell.Entirerow
msgbox "There are " & CountColorIf(rng) & " yellow cells in this row!"
End If
Application.ScreenUpdating = True
Application.enableevents = True
Application.Calculation = xlCalculationAutomatic
End Sub