Excel UDF 函数未更新
Posted
技术标签:
【中文标题】Excel UDF 函数未更新【英文标题】:Excel UDF Function Not Updating 【发布时间】:2020-04-01 20:32:37 【问题描述】:我正在尝试使我的 UDF 函数在其参考单元格更新时更新。
代码如下:
Function ConCatRange(CellBlock As Range) As String
Application.Volatile True
Dim cell As Range
Dim sbuf As String
For Each cell In CellBlock
On Error GoTo fred
If Len(cell.Text) > 1 Then sbuf = sbuf & cell.Text & Chr(10)
Next
ConCatRange = Left(sbuf, Len(sbuf) - 1)
fred:
End Function
但是,当参考单元格为空白时,它不会显示#VALUE! - 这就是我要的。相反,它不会更新并保留上次填充单元格的数据。
谢谢!
【问题讨论】:
我假设你没有 TEXTJOIN? 除了@GarysStudent 的建议,Application.Volatile
是不必要的。每当更新引用的单元格时,UDF 都会更新;并且拥有它会迫使它不必要地重新计算。
很遗憾,我没有 textjoin。
【参考方案1】:
如果您想查看#VALUE!
,只需删除On Error
语句。这将允许Left()
函数报告其失败。
【讨论】:
抛出错误不同于像内置 UDF 那样向单元格返回错误。 @HackSlash 最终结果将是相同的,因为#VALUE
将由公式返回到包含公式的单元格。
这没有达到预期的效果。除非我单击单元格并手动点击“输入”,否则该功能仍然无法自动更新。
@BobbyZullo 您是否将计算模式设置为自动?【参考方案2】:
试试这个:
Function ConCatRange(CellBlock As Range) As String
Application.Volatile True
Dim cell As Range
Dim sbuf As String
For Each cell In CellBlock
On Error GoTo exitErr
If Len(cell.Text) = 0 Then GoTo exitErr
If Len(cell.Text) > 1 Then sbuf = sbuf & cell.Text & Chr(10)
Next
ConCatRange = Left(sbuf, Len(sbuf) - 1)
Exit Function
exitErr:
ConCatRange = CVErr(xlErrValue)
End Function
在循环中,检查文本长度是否为 0,如果找到,则返回 CVErr(xlErrValue) - 也称为“#VALUE!”
【讨论】:
这并没有达到预期的效果。除非我单击单元格并手动点击“输入”,否则该功能仍然无法自动更新。以上是关于Excel UDF 函数未更新的主要内容,如果未能解决你的问题,请参考以下文章
如何根据单元格颜色获取 UDF 以在 Excel 中自动更新