2010-04-15 130 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