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

Voi*_*cus 2 excel vba excel-2007 cell excel-vba

我使用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
Run Code Online (Sandbox Code Playgroud)

当单元格的名称不存在时,它会显示错误 - 这当然是预期的行为.但是,当我然后命名另一个单元格(我想要获取的名称)时,我的单元格中的错误仍然有效.重新计算没有帮助.我需要更改其他单元格的值(我可以更改其值或更改其公式中的另一个单元格的值)或其公式,以便重新计算该单元格中的值,因此我的单元格具有CellName函数得到适当的刷新.

我没有看到为什么这一点,当我命名我指向的单元格时,我能做些什么来简单地使单元格刷新?

这是Excel 2007,文件类型为xlsm.

Our*_*nas 5

我认为你需要将函数设置为Volatile

在UDF的开头,添加以下代码:

application.volatile
Run Code Online (Sandbox Code Playgroud)

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