为什么Excel的“评估”方法是通用expression式评估器?

最近涉及到的一些问题涉及Application.Evaluate方法可以从Excel VBA调用。 旧的XLMmacros语言也暴露了一个EVALUATE()函数。 两者都可以是非常有用的。 有谁知道为什么被暴露的评估者可以处理一般expression式?

我自己的预感是,Excel需要让人们从string地址获取范围,并获得命名公式的值,并且只需打开expression式评估程序的入口是最简单的方法。 (VBA版本的帮助确实表示它将“将Microsoft Excel名称转换为对象或值”)。但是,当然,您不需要评估任意expression式的能力就可以做到这一点。 (也就是说,Excel可以提供一个Name.Evaluate方法或其他东西)。

Application.Evaluate 。评估似乎有点…未完成。 这是完整的行为没有很好的logging,并有一些怪癖和局限性(如查尔斯·威廉姆斯在这里描述: http : //www.decisionmodels.com/calcsecretsh.htm )与暴露。

我想答案可能只是“为什么不揭露它?”,但我有兴趣知道什么样的devise决定导致了这个function的forms。 如果没有,我会有兴趣听到其他的预感。

那么我认为它需要启用VBA来从命名公式(或包含公式的string)中获得结果,(还有一种将公式插入到备用单元然后读回结果的丑陋方法,这个例子在UDF里面不起作用)。

在VBA中,它的复杂性决定了一个Defined Name是否包含范围引用或公式。 使用评估适用于这两种情况。

它也有时非常高效和简单地build立Excel公式作为string和评估它们,而不是必须将所有数据从Excel到VBA,然后在VBA中进行计算。 (从Excel获取数据到VBA中的代价很高,而在当前的.NET实现中则更是如此)。