【问题标题】:Excel VBA - Calculate in VBAExcel VBA - 在 VBA 中计算
【发布时间】:2017-07-17 01:53:40
【问题描述】:

简单的问题。我有一个代表公式的字符串。

喜欢

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 中评估它并返回结果。我没有让 Evaluate 进行计算。

processFormula 是一个生成公式的函数,它返回一个字符串。因此,将一个字符串放入替换函数中,该函数将“##”替换为一个数字。这里没有什么神奇的。关于调试器公式是一个具有上述值的字符串(它是直接从调试器复制的)。

有没有简单易行的方法?

谢谢,希望不要重复。

【问题讨论】:

  • 什么是processFormula?有什么功能吗? processFormula 的输出是什么?
  • 它是一个返回的字符串。所以我把一个字符串放入替换中。
  • 你应该将逗号替换为 1007,27 中的一个点

标签: excel vba ms-office


【解决方案1】:

你应该用小数点替换小数点

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)

【讨论】:

  • 是:Evaluate 总是期望使用美国英语公式
【解决方案2】:

应该没有问题:

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

【讨论】:

  • 问题是它是一个字符串。我会在我的描述中更改它
  • @sascha10000 查看我的EDIT#1
  • 我会将确切的公式放入描述中。正如您所说,我正在使用评估。它不工作。
  • 是的,我添加了相关部分。正如我所看到的,问题不在于它本身的字符串。
【解决方案3】:

使用下面的子。

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

【讨论】:

  • 正如我所说,我有一个字符串。我在我的问题中纠正了它。我不认为我可以将字符串分配给 double 即使它是一个论坛。对吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多