我将以下UDF保存在工作簿的模块中:
Function sumAbove(cel As Range) As Double
Dim firstCell As Long
Dim i As Integer
'Application.Volatile '(False)
firstCell = cel.Row
While Not cel.Offset((cel.Row - firstCell) * -1, 0).NumberFormat = "0.00%"
firstCell = firstCell - 1
Wend
sumAbove = WorksheetFunction.Sum(Range(Cells(firstCell + 1, cel.Column), cel))
ActiveSheet.EnableCalculation = True
End Function
该功能可以正常工作,但我的问题是工作簿似乎在某种程度上"删除"工作表中的sumAbove
。即我把=SumAbove(b4)
放到了68
。大!然后,如果我进入电子表格中的另一个工作表,添加图表,执行操作等等,然后返回,单元格将显示或
#Value!
发生了什么,为什么会这样这样做?
我的工作簿计算设置为自动,我添加.EnableCalculation
这应该有所帮助。
有点奇怪的是,当上述UDF无法正确计算时,以下公式会出现#Value
错误:
=IF(AND(A69<>"",D70<>""),TEXT(A69,"m/dd/yyyy")&" Average Row","")
即使该公式中没有任何内容与sumAbove
单元格相关。我必须转到单元格,点击F2
,Enter
,然后它会解析为正确的输出。
我的工作簿可能会发生什么?感谢您的任何想法/建议!
编辑:请注意 - 我确实有两个其他UDF,但没有一个在工作表更改或单元格更改上运行,它们只是&#34;常规&#34;功能。我已将Application.Volatile (false)
添加到我的UDF中,但这并没有改变任何内容。正如@legendjr指出的那样,我认为这是由于Volatility在某处...但我的页面中的数据根本没有变化,所以即使函数是不稳定的,也不会有这个功能只是重置为它的价值?
Edit2:也许值得注意 - 当我能够sumAbove
工作时,只有我点击的单元格刷新到了值...其他sumAbove
单元格才会停留{{1} }