Excel VBA:在用户定义的函数中命名范围

时间:2018-03-01 00:58:58

标签: excel vba excel-vba

我正在尝试创建用户定义的函数来创建命名范围并为单元格指定值。下面的代码给了我一个#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

非常感谢任何修复此代码的帮助。感谢

1 个答案:

答案 0 :(得分:2)

您确定自己没有#NAME?错误吗?

无论哪种方式,您的公式都存在一些问题。简短的解释是它没有逻辑意义。

我们假设你在A1的单元格Sheet1中坚持使用该公式...

您正尝试使用工作表功能创建命名范围。每次工作表上的某些更改时,工作表函数都会重新计算(重新执行)。 Excel将尝试通过现有名称重复创建新的命名范围,一遍又一遍。

想象一下,如果你不得不随时扫地,有时你的房子会发生变化......但扫地会改变你的房子。你会陷入无限循环。

您还希望该函数为该函数所在的单元格分配一个公式。如果您可以克隆自己,但克隆唯一可以站立的地方是完全你站在哪里。不会工作。

最后,您希望通过将值返回到具有该函数的相同单元格(以及其自身的无限副本)来完成...但不仅仅是任何值:您在函数中调用函数的值第一名。

它就像一个悖论泥潭的Catch-22。

除了“不要”之外,没有任何解决方案可以做到。"不要" Excel无论如何都不会让你失望,这很好,因为否则宇宙可能会崩溃。

comic

  

工作表单元格中的公式调用的用户定义函数不能   更改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