简单的问题。我有一个代表公式的字符串。
喜欢
Dim formula As String
formula = Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000)
'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)"
MsgBox (formula)
'Evaluate(formula) not working sadly现在我想在VBA中评估它并返回结果。我没有得到评估去为计算工作。
processFormula是一个生成公式的函数,它返回一个字符串。因此,将字符串放入替换函数中,该函数将“##”替换为数字。这里没什么神奇的。对于调试器公式,是一个具有上述值的字符串(它是直接从调试器复制的)。
有简单容易的方法吗?
谢谢,我希望这不是复制品。
发布于 2017-02-26 14:59:46
您应该用小数点替换十进制逗号。
Dim formula As String
formula = replace(Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000),",",".")
'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)"
MsgBox (formula)
Evaluate(formula) 'should work now ;o)发布于 2017-02-26 13:30:25
不应存在任何问题:
Sub eval()
MsgBox Evaluate((100 * 20) / 30 * 500)
End Sub

它与等效的单元格公式匹配。注意,这是,而不是,与以下内容相同:
(100*20)/(30*500)EDIT#1:
这也适用于:
Sub eval2()
Dim s As String
s = "((100 * 20) / 30 * 500)"
MsgBox Evaluate(s)
End Sub发布于 2017-02-26 13:29:52
使用下面的潜艇。
Sub Calculate()
Dim x As Double
x = ((100 * 20) / 30 * 500)
Range("A1") = x
MsgBox x
End Subhttps://stackoverflow.com/questions/42469022
复制相似问题