我正在制作我的第一个VBA程序并尝试运行以下功能。该函数检查第一行的特定命名范围,该范围的值不大于其前导值,但小于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中删除了注释',并使用调试工具进出每个函数步骤,因为它走过桌子。但是,当我使用=findPurchase()
在Excel中引用该函数时,我遇到了#NAME?
错误。当我开始输入其名称时,该功能甚至会显示在功能自动完成框中。当我编写带有和不带参数的其他函数时,我可以很好地引用它们,例如:
Function addtwo()
addtwo = 1 + 2
End Function
我的功能错误导致它无法正常工作?
答案 0 :(得分:32)
您收到该错误是因为您有一个与该函数同名的模块。
将该名称更改为find_Purchase
,一切都会正常:)请参阅下图...
答案 1 :(得分:9)
我自己也有同样的问题。事实证明,我“保存为...”另一个文件和宏未启用该文件。顶部没有横幅,但生成了#NAME?
错误。
我重新打开了文件,启用了宏,问题得到了解决。
答案 2 :(得分:5)
确保已将该功能放入标准模块中。错误消息表示Excel无法找到该功能。
答案 3 :(得分:2)
当Excel打开包含VBA代码的未知工作簿时,它通常会要求用户启用宏(取决于应用程序设置)。
如果用户随后启用了宏,则将启动所有事件驱动的过程,例如auto_open
或其他。
自定义VBA函数需要完全重新计算工作簿。否则函数返回值仍为#NAME
,因为计算仅在打开工作簿后直接完成。
为了在第一次开放时直接工作,必须在workbook_open
事件中添加以下行
'
' Workbook open event
Private Sub Workbook_Open()
Application.CalculateFullRebuild
End Sub
答案 4 :(得分:1)
检查&#34;信任对VBA项目对象模型的访问&#34;在宏安全的宏设置中
答案 5 :(得分:1)
这就是为什么我遇到该错误。到目前为止尚未提供此答案。
如果您打开了两个或更多工作簿(电子表格),则您的模块可能位于另一个工作簿下-并不是您唯一要进行计算的地方。这似乎似乎是不可能的,但是……打开开发者/ VBA代码编辑器后,Excel便希望向您显示每个打开的工作簿的结构(对象,模块等)。作为开发人员,这不是我期望的,但是确实如此。因此,像我一样,您可能按下了“添加模块”,并将代码放在了另一个工作簿和工作表中。
如果这是您的问题,则上述任何内容均无效。通过此VBA代码编辑器将您的VBA模块和代码移动到正确的电子表格中。
答案 6 :(得分:0)
当其他一切看起来很好的时候,我的一个功能出现了类似的持久性问题。 打开工作表&amp;转到开发人员选项卡。打开VBA,然后返回Developer功能区选择“View Code”。看看它是否打开了特定于该工作表的任何类似代码(除了你的模块)(例如Sheet2(代码)。我发现除了模块之外我还复制了工作表上的代码。删除“工作表”代码。(您可能需要保存工作簿并在此阶段重新打开。)当我删除工作表代码时,模块功能随后工作。
答案 7 :(得分:0)
除了检查上面提到的一些项目之外,您可能还需要指定实际定义自定义函数的文件名,例如:细胞含量 = XLstart.xlsm!myCustomFunc(ARG1,Arg2)将 其中myCustomFunc在启动文件XLstart.xlsm中定义。
按照Excel帮助&#34;更正#NAME?错误&#34;:
在公式栏中,选择[可疑]功能名称。 在名称框(公式栏左侧)中,单击箭头,然后从Excel建议的列表中选择[用户定义的]函数。
这将按照上述格式添加文件名。
MS 2010,Windows 10。
答案 8 :(得分:0)
真, 我有相同的(在Excel 2010中),当我迁移到Excel 2016时,显示了函数原型,但是当我完成该函数时,#NAME错误显示为弹出...所以代码从未被触发
原来我有一个与Sub或UDF功能同名的宏! 我重命名了宏,然后它工作了
干杯
答案 9 :(得分:0)
我为#NAME找到了另一个原因?错误是具有自定义函数的宏工作簿具有与函数名称相同的范围名称。我更改了函数名称并解决了问题。
答案 10 :(得分:0)
此问题的一个原因是安全限制。.我遇到了这个问题,然后从安全中心激活了“ 启用所有宏”,问题就解决了
答案 11 :(得分:0)
此解决方案适用于以其他语言(而非“美国英语”)安装Excel的用户: 复制活动工作簿的副本以复制它并随后立即打开副本时,我遇到了类似的问题:
无效代码:
ThisWorkbook.SaveCopyAs NewFileName
Set wb = Workbooks.Open(FileName:=NewFileName)
这总是显示几个错误2029 /“ #NAME?”的单元格。如果我通过“文件”菜单以“官方方式”打开工作簿,则它按预期运行。
我通过在打开的语句中添加参数“ local:= true”解决了该问题:
工作代码:
ThisWorkbook.SaveCopyAs NewFileName
Set wb = Workbooks.Open(FileName:=NewFileName, Local:=True)
因为VBA在我的德语工作簿中期望英文功能名称。通过此参数,直接告诉VBA使用本地名称。
我希望这不会像我那样帮助某人放松几个小时...
答案 12 :(得分:0)
简短回答 - 如果该功能之前可以运行,请重新启动您的计算机。
长答案 - 我也遇到过同样的事情。问题是我创建的函数已经工作了几个月。然后有一天,它开始显示 #NAME 错误,而不是像以前那样工作。我曾尝试关闭所有其他 excel 工作簿,甚至一起关闭 excel 并重新打开工作表。似乎没有任何效果。然后为了踢球,我将代码编辑到我知道 VBA 会抱怨存在编译错误的地方。令人惊讶的是,它没有抱怨。好的...我还是保存并关闭了 excel,然后重新启动了我的电脑。
重新启动后,我重新打开了 excel 工作簿。然后VBA终于给了我一个编译错误。所以我把我的函数改回了我之前的原始代码,现在工作表正在像它应该的那样运行这个函数。不再有 #NAME 错误。
不确定所有这些步骤都是必需的,但只需重新启动计算机似乎就解决了我的问题。