评估命名范围上的函数,通过EVALUATE自己定义

在Excel 2010中。

给定一个命名范围的名称,我试图评估这个命名范围的公式,当它本身已经通过评估定义。 举个例子可能会更好:

使用这个vba函数:

Function eval(str As String) As Variant eval = ActiveSheet.Evaluate(str) End Function 

并定义命名范围_xyz(公式选项卡>名称pipe理器,或Alt,I,N,D)(下划线在这里以避免与单元名称冲突):

名称:_xyz

范围:Sheet1

指的是: =ROW(Sheet1!$A$1:$A$10)

如果使用公式= _xyz (然后按Ctrl-Shift-Enter)在Sheet1(作为垂直的1列行)中的某个位置创build一个数组公式,则可以得到值1,2,3 …… 10柱。

然后公式如=AVERAGE(_xyz)=MAX(_xyz)工作(相应的结果为5.5和10)。 因此,给定名称的范围(这里是“_xyz”)和适当的函数(平均或最大): =eval("AVERAGE(_xyz)")返回5.5和=eval("MAX(_xyz)")返回10.到目前为止这么好。

现在我定义一个新的命名范围_xyz2为:

名称:_xyz2

范围:Sheet1

指的是: =EVALUATE("_xyz*_xyz")

如果用公式= _xyz2 (然后按Ctrl-Shift-Enter)在Sheet1的某个位置(作为垂直的1列的行)创build一个数组公式,则可以得到值= _xyz2 … 100列(即_xyz的值的平方)。

公式如=AVERAGE(_xyz2)=MAX(_xyz2)都可以正常工作(相应的结果为38.5和100), 但是 eval函数不再有效:公式如=eval("AVERAGE(_xyz2)")=eval("MAX(_xyz)")现在返回#VALUE !.

我已经尝试了其他types的eval函数。 例如:

 Function eval2(str As String) As Variant eval2 = Application.WorksheetFunction.Average(ActiveSheet.Evaluate(str)) End Function 

…希望=eval2("_xyz2")将工作,但它不( =eval2("_xyz")工作正常)。

有没有函数,Excel或VBA,它将string“_xyz2”作为input,并返回适当的结果(在我们的例子中,平均值和最大值函数为38.5和100)?

如果_xyz2被定义为=_xyz*_xyz但是如果被定义为=EVALUATE("_xyz*_xyz")
我怀疑这会导致评估无法自行调用的问题