用户定义模块评估的单元格不会自动更新

用户定义模块评估的单元格不会自动更新

我阅读了现有的问题,但似乎没有答案能有所帮助。我用 VB 编写了一个函数,它根据字体颜色计算特定范围内单元格的总和,当我输入该函数时,一切都运行良好(计算结果正确)。

但是当我改变一个单元格(函数范围内的单元格)的颜色时,总和值根本没有变化。只有当我重新输入函数时,它才会改变(在那个特定的单元格中)(我不必完全擦除,只需在标记函数时再次按 Enter 即可)。

问题可能出在哪里?所有设置似乎都没问题,我尝试打开新的工作表,但问题仍然存在。

笔记:

Ctrl + Alt + F9 可以工作,但是Application.Volatile不行(虽然我在使用 Excel 2013)。

无论如何,这是我的代码(尽管它可以运行):

Public Function SumByColor(rng As Range, clr As String) As Double
Application.Volatile

Dim s As Double
s = 0
Dim r As Range
Dim c As Long
If clr = "red" Then
    c = RGB(256, 0, 0)
End If
If clr = "black" Then
    c = RGB(0, 0, 0)
End If

For Each r In rng
    If r.Font.Color = c Then
        s = s + r.Value
    End If
Next r

SumByColor = s
End Function

答案1

Application.Volatile还不够......每次计算工作表时函数都会进行计算,如果您只是改变颜色,这可能不会发生。

编辑#1:

首先我们修改一下你的UDF()使其接受它不使用的可选变体参数!:

Public Function SumByColor(rng As Range, clr As String, Optional v As Variant) As Double
   Application.Volatile
   Dim s As Double
   s = 0
   Dim r As Range
   Dim c As Long

   If clr = "red" Then
       c = RGB(256, 0, 0)
   End If
   If clr = "black" Then
       c = RGB(0, 0, 0)
   End If

   For Each r In rng
       If r.Font.Color = c Then
           s = s + r.Value
       End If
   Next r

   SumByColor = s
End Function

然后在工作表中使用类似以下内容:

=SumByColor(A1:A14,"red",NOW())

在此处输入图片描述

这个想法是,如果你触摸F9NOW()将会重新计算,因此UDF()

相关内容