Excel VBA – 以VBA计算

简单的问题。 我有一个string表示一个公式。

喜欢

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是一个生成公式的函数,它返回一个String。 所以一个string被放入replace函数,用一个数字代替'##'。 这里没什么神奇的。 关于debugging器公式是一个带有上述值的string(它直接从debugging器复制)。

有一个简单而简单的方法吗?

谢谢,我希望它不是重复的。

你应该用小数点replace小数点的逗号

 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) 

应该没有问题:

 Sub eval() MsgBox Evaluate((100 * 20) / 30 * 500) End Sub 

在这里输入图像说明

它与等效的单元格公式相匹配。 注意这不是一样的:

  (100*20)/(30*500) 

编辑#1:

这也适用:

 Sub eval2() Dim s As String s = "((100 * 20) / 30 * 500)" MsgBox Evaluate(s) End Sub 

使用下面的子。

 Sub Calculate() Dim x As Double x = ((100 * 20) / 30 * 500) Range("A1") = x MsgBox x End Sub