为什么我的Excel2010UDF会停止使用#NAME?错误?

我有 Excel 2010。几个月前我写了一些 UDF 并让它们调试和工作。今天我更改了电子表格中的一个值,突然所有 UDF 都显示#NAME?

最终我决定从头开始。我创建了一个只有一个 UDF 的新工作簿。在这里,它的全部内容是:

Function say7() As Integer
    say7 = 7
End Function

然后我去了 Sheet1,在 A1 框中输入了“=say7()”。我得到了“#NAME?”。

如果我输入“sa”,下拉菜单会显示“say7”。我可以按 Tab 或 Enter 并填写函数名称。然后它说#NAME?。

我了解 Excel 2010 不再受支持。微软是否采取了一些措施来破坏 UDF?

我的 XLSM 几周前还在工作。事实上,我进行更改的文件是原始电子表格的副本。我回到原来的状态,在一个应该强制重新计算的单元格中更改了一个值,它说#NAME?。我没有改变代码,我没有改变任何设置,什么都没有。我唯一改变的是一个数据值,并且以某种方式使函数名称不再被识别。

更新:几位发帖人指出“say7”不是 Excel 中函数的合法名称,使用此名称会产生 #REF?错误。真的。但我的问题是我得到了一个#NAME?错误,不是#REF?错误。在我尝试创建一个简化的场景时——以确保问题不是函数中的某个错误——我创建了一个新的、故意非常简单的函数,它具有相同的#NAME?错误。是的,我给这个函数起了一个非法的名字,这让我的问题变得混乱。对于造成的混乱,我深表歉意。解释为什么 say7 是无效名称是有趣且有用的信息,但遗憾的是并没有解决我原来的问题。

回答

当您编写函数时,有命名它的传统规则。其中一位说

您不应使用与 Visual Basic 中的函数、语句和方法相同的任何名称,因为您可能会在语言中隐藏相同的关键字。

该名称Say7虽然看起来无害,但与编号为 12895 的列发生冲突,该列名为SAY. 所以原则上,下面对我有用,但我没有 Excel 2010 来查看和确认。

Public Function SaySeven() As Integer
    SaySeven = 7
End Function

编辑:

看完OP自己的回答贴和其他细节后,我又想到了一种我们可能会遇到#NAME错误的情况。这可以很容易地重现。

步骤 1:创建 UDF 并保存工作簿。这样做时,不应将其保存在 Excel 的受信任位置,并且不应将文件标识为受信任。如果它受信任,则 Excel 不会提示启用活动内容。在创建时,Excel 将生成没有任何错误的结果。现在关闭工作簿。

第 2 步:重新打开此工作簿。您将收到以下消息提示。

忽略此消息,即不要按“启用内容”按钮。OP 可能在某处错过了此消息。

步骤 3:如果 UDF 是在前一个会话中实现的,并且它返回了一个有效的结果,那么它在重新计算时不会返回任何错误。但是,如果您在新单元格中输入此 UDF,则 Excel 将返回#NAME错误。在下面的快照中,绿色单元格和黄色单元格都包含完全相同的公式,即

=dist3()

但结果不同。

所以总而言之:UDF 名称dist3是有效的,它应该像 OP 在他后来的帖子中引用的那样工作。但是,在上述特定情况下,可能会遇到此类错误。但是,它将适用于所有 UDF,而不仅仅是dist3.

我已经在 Excel 的Office 365版本中对此进行了测试,但我认为不同版本的这种行为不会有任何重大差异。

  • I can confirm your answer. Just tested it in Office365, Excel 2016, version 2008 (Build 13127.20910).

以上是为什么我的Excel2010UDF会停止使用#NAME?错误?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>