我阅读了现有的问题,但似乎没有答案能有所帮助。我用 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())
这个想法是,如果你触摸F9,NOW()
将会重新计算,因此UDF()。