我正在尝试创建用户定义的函数来创建命名范围并为单元格指定值。下面的代码给了我一个#Value错误
我的代码:
Public Function NameARange(CValue As String, NameR As String) as String
Dim ReferAdd As String
ReferAdd = "='" & ActiveSheet.Name & "'!" & ActiveCell.Address
ActiveWorkbook.Names.Add Name:=NameR, RefersTo:=ReferAdd
NameARange = CValue
End Function
非常感谢任何修复此代码的帮助。感谢
答案 0 :(得分:2)
您确定自己没有#NAME?
错误吗?
无论哪种方式,您的公式都存在一些问题。简短的解释是它没有逻辑意义。
我们假设你在A1
的单元格Sheet1
中坚持使用该公式...
您正尝试使用工作表功能创建命名范围。每次工作表上的某些更改时,工作表函数都会重新计算(重新执行)。 Excel将尝试通过现有名称重复创建新的命名范围,一遍又一遍。
想象一下,如果你不得不随时扫地,有时你的房子会发生变化......但扫地会改变你的房子。你会陷入无限循环。
您还希望该函数为该函数所在的单元格分配一个公式。如果您可以克隆自己,但克隆唯一可以站立的地方是完全你站在哪里。不会工作。
最后,您希望通过将值返回到具有该函数的相同单元格(以及其自身的无限副本)来完成...但不仅仅是任何值:您在函数中调用函数的值第一名。
它就像一个悖论泥潭的Catch-22。
除了“不要”之外,没有任何解决方案可以做到。"不要" Excel无论如何都不会让你失望,这很好,因为否则宇宙可能会崩溃。
工作表单元格中的公式调用的用户定义函数不能 更改Microsoft Excel的环境。这意味着这样的 功能不能执行以下任何操作:
在电子表格中插入,删除或格式化单元格。
更改其他单元格的值。
移动,重命名,删除或向工作簿添加工作表。
更改任何环境选项,例如计算模式或屏幕视图。
将名称添加到工作簿。
设置属性或执行大多数方法。
用户定义函数的目的是允许用户创建一个自定义函数,该函数不包含在Microsoft Excel附带的函数中。 Microsoft Excel中包含的功能也无法更改环境。函数可以执行计算,将值或文本返回到输入的单元格。应通过使用Visual Basic子例程进行任何环境更改。
在计算过程中,Excel会检查包含用户定义函数的单元格的先例。如果在计算过程中到目前为止尚未计算所有先例,Excel最终会调用用户定义的函数并将Null或Empty单元格传递给函数。然后,Excel确保为计算所有先例进行足够的计算过程。在最终计算过程中,用户定义的函数将传递单元格的当前值。这可能导致用户定义的函数比预期更频繁地调用,并且具有意外的参数。因此,用户定义的函数可能会返回意外值。
为了正确计算,计算中使用的所有范围都应作为参数传递给函数。如果未将计算范围作为参数传递,则Excel不能在函数的VBA代码中引用范围,而是无法在计算引擎中考虑它们。因此,Excel可能无法充分计算工作簿,以确保在计算用户定义的函数之前计算所有先例。
(来源:Microsoft:Description of limitations of custom functions in Excel)