2010-04-15 150 views
1

的几个问题都拿出了最近涉及Application.Evaluate方法从Excel VBA调用。旧的XLM宏语言也暴露了EVALUATE()函数。两者都可能非常有用。有人知道为什么公开的评估者可以处理一般表达式吗?为什么Excel的“评估”方法是一般表达式评估器?

我自己的预感是,Excel需要给人们一种获取字符串地址范围的方法,并获得命名公式的值,并且只需打开表达式评估程序的入口即可。 (对于VBA版本的帮助的确表达了它将“将Microsoft Excel名称转换为对象或值”的目的)。但是,当然,您不需要评估任意表达式的能力就可以做到这一点。 (也就是说,Excel可以提供Name.Evaluate方法或其他方法。)

Application.Evaluate似乎有点......未完成。它的完整行为没有很好的记录,并且存在许多怪癖和局限性(正如Charles Williams在这里所描述的:http://www.decisionmodels.com/calcsecretsh.htm)。

我想答案可能是简单的“为什么不公开呢?”,但我很想知道的决策导致了此功能采取的是它的形式是什么设计。否则,我会有兴趣听到其他预感。

回答

2

嗯,我觉得需要它,以使VBA获得从命名公式的结果(或包含公式的字符串),(OK也有插入式到备用电池,然后读回丑陋的方法结果,但例如,这不会从UDF内部工作)。

在VBA其复杂的,以确定是否已定义的名称包含一系列参考或公式。使用评估适用于这两种情况。

它有时也非常有效和易于构建Excel公式为字符串,并对其进行评估,而不是把从Excel中的所有数据到VBA,然后做计算的VBA。 (从Excel获取数据到VBA的成本很高,在当前的.NET实现中更是如此)。

+0

所有的好点,但我想知道为什么让人们评价任意表达式。我会稍微更新我的问题。 – jtolle 2010-04-15 19:38:43

+0

你答案的最后部分确实指出了我的正确方向。评估简单表达式非常有用,但是您不会编写单独的“简单表达式评估器”并将其公开;你只是揭露了整个事情。不过,我想知道为什么粗糙的边缘? – jtolle 2010-04-15 19:53:44

+0

就这么清楚,这个答案是在我编辑它之前的问题,即“为什么Excel会公开'评估'方法?”。这些都是很好的理由。 – jtolle 2010-04-15 20:02:07