VBA Excel函数不会持续运行

所以我有一个在Excel中的函数,基本上加起来有多less黄色单元格的行。

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 

代码的作品,但不是立即…因此,例如说,我使两个单元格黄色,然后我必须单击回到放置此function的单元格,然后按Enter键以显示正确的数字。

任何人都可以告诉我如何使它在任何时候工作表被改变时运行?

我发现有关Worksheet.event的东西(对不起,类似的东西),但从我的理解,只适用于一个子而不是一个函数。

任何帮助将是真正的appartiated!

干杯

山姆

您可以将您的function标记为“ Volatile以便每次发生更改时都重新定位。 这可能是CPU密集型,尽pipe因为即使input一个数字也会导致它运行。

 Application.Volatile (True) 

编辑:这不会为你工作

原因: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