VBA Excel函数不会继续运行

时间:2015-07-28 18:16:15

标签: excel vba excel-vba

所以我在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而不是函数。

任何帮助都会非常有用!

干杯

萨姆

2 个答案:

答案 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