为什么不使用自定义函数来重新计算名称?

我使用vba函数获取单元格名称(取自Excel中的检索单元名称 )

Public Function CellName(oCell As Range) As Variant Dim oName As Name For Each oName In ThisWorkbook.Names If oName.RefersToRange.Parent Is oCell.Parent Then If Not Intersect(oCell, oName.RefersToRange) Is Nothing Then CellName = oName.Name Exit Function End If End If Next CellName = CVErr(xlErrNA) End Function 

当单元格的名称不存在时,它显示错误 – 这当然是有意的行为。 但是,当我然后命名另一个单元格(我想获得的名称),我的单元格中的错误仍然是活动的。 重新计算没有帮助。 然后我需要改变另一个单元格的值(我可以改变它的值或改变另一个单元格的值),或者它的公式,所以这个单元格的值将被重新计算,所以我的单元格与CellName函数得到适当刷新。

我没有看到为什么,我可以做些什么来简单地使单元格刷新,当我指出我指的单元格?

这是Excel 2007,文件typesxlsm。

我认为你需要设置function为易失性

在你的UDF的开始,添加下面的代码:

 application.volatile 

请参阅MSDN库:易失性方法[Excel 2003 VBA语言参考]