#名称? Excel中的VBA函数错误

我正在做我的第一个VBA程序,并试图运行以下function。 该函数检查第一行的具体命名范围,该行的值不具有大于其前导值但小于1的值。

Public Function findPurchase() Dim CRT As Range Set CRT = Range("CostRateTable") Dim existsBetter As Boolean existsBetter = True Dim r As Integer r = 2 Dim c As Integer c = 4 While existsBetter Dim Found As Boolean FoundBetter = False While Not FoundBetter And c <= CRT.Columns.Count If CRT(r, c) > CRT(r, 2) And CRT(r, c) < 1 Then FoundBetter = True Else c = c + 1 End If Wend existsBetter = FoundBetter If existsBetter Then r = r + 1 End If Wend findPurchase = CRT(r, 3) 'MsgBox(findPurchase) End Function 

我知道该函数做了什么,因为我已经手动检查了值的表,从MsgBox中删除了“注释”,并使用debugging工具进入和退出每个function步骤,因为它通过表。 但是,当我使用=findPurchase()在Excel中引用函数时,我给了#NAME? 错误。 当我开始键入它的名字的时候,函数甚至会出现在函数自动完成框中。 当我编写其他函数时,无论有无参数,我都可以参考它们,例如:

 Function addtwo() addtwo = 1 + 2 End Function 

我在做什么错我的function导致它不工作?

你得到这个错误是因为你有一个与函数名字相同的模块。

在这里输入图像说明

改名称find_Purchase ,一切都会好:)看到下面的图片…

在这里输入图像说明

我自己也有同样的问题。 原来,我“另存为…”另一个文件和macros没有启用该文件。 顶部没有横幅出现,但#NAME? 产生了错误。 我重新打开了文件,启用了macros,问题就解决了。

确保您已将该function置于标准模块中。 错误消息意味着Excel无法find该函数。

当Excel打开包含VBA代码的未知工作簿时,通常会要求用户启用macros(取决于应用程序设置)。

如果用户启用了这些macros,则将启动所有的事件驱动程序,例如auto_open或其他。

但是,自定义VBA函数需要完整重新计算工作簿。 否则函数的返回值仍然是#NAME ,因为计算只能在打开工作簿后直接进行。

为了在第一次打开时直接工作,必须将以下行添加到workbook_open事件中

 ' ' Workbook open event Private Sub Workbook_Open() Application.CalculateFullRebuild End Sub 

当我的一个function看起来很好的时候,我也遇到了类似的问题。 打开工作表并转到“开发人员”选项卡。 打开VBA,回到开发人员function区select“查看代码”。 看看它是否打开任何特定于该工作表的类似代码(例如Sheet2(Code))。我发现除了模块之外,我还在工作表上复制了代码。删除“工作表”代码。您可能需要保存工作簿并在此阶段重新打开)。当我删除工作表代码时,模块function才起作用。

除了检查上面提到的一些项外,还可能需要指定自定义函数实际定义的文件名,例如单元格内容= XLstart.xlsm!myCustomFunc(Arg1,Arg2),其中myCustomFunc在启动文件XLstart中定义。 XLSM。

遵循Excel帮助“更正#NAME?错误”:

在公式栏中,select[可疑]函数名称。 在名称框(在公式栏的左侧),单击箭头,然后从Excelbuild议的列表中select一个[用户定义的]函数。

这将按照上述格式添加文件名。

MS 2010,Windows 10。

从macros安全性的macros设置中选中“信任访问VBA项目对象模型”

确实,我有相同的(在Excel 2010中),当我迁移到Excel 2016,函数原型显示,但是当我完成该函数,#NAME错误显示popup…所以代码是从未触发。

原来我有一个与Sub或UDF函数同名的macros! 我重命名macros,然后它的工作

干杯