【问题标题】:VBA - Bypass Application.evaulate limitVBA - 绕过 Application.evaluate 限制
【发布时间】:2018-07-20 15:40:15
【问题描述】:

所以我得到了一个字符串,其中包含我想要计算为总和的数值。我尝试使用Application.evaluate,但我注意到我可以在计算中使用的字符数量有限制。有没有办法绕过或修复它以便我可以计算它?我正在考虑编写自己的“计算器”,但感觉有点过头了,一定有更简单的方法吗?

0 /(2^16) + 3 /(2^16) + 53 /(2^16) + 139573 /(2^16) + 1844259 /(2^16) + 4005892 /(2^16) + 7546905 /(2^16) + 14629148 /(2^16) + 15078164 /(2^16) + 7477520 /(2^16) + 3158785/(2^16) + 1258795/(2^16) + 538914/(2^16) + 396079/(2^16) + 12305/(2^16) + 1555/(2^16) + 258/(2^16) + 8/(2^16) + 4 /(2^16)

另一个例子:

1215 /( 7168 + 5922 + 5390 + 7034 + 10410 + 10494 + 12113 + 6607 + 448 + 67 + 2996 + 4103 + 15581 + 18432 + 7299 + 1215 + 177 + 11 + 3 + 0)*100

【问题讨论】:

  • 你不能把它分成两半吗?为什么不Application.Evaluate(1st_half_of_math) + Application.Evaluate(2nd_half_of_math)
  • @QHarr 抱歉,更新了
  • @Taelsin 想过,但不知道如何在不破坏任何东西的情况下做到这一点。可以说那不是“+”,那么我不能拆分它,或者如果计算为 8/(6+2),这也可能会破坏计算。
  • 鉴于您的问题,这将起作用:Application.Evaluate("0 /(2^16) + 3 /(2^16) + 53 /(2^16) + 139573 /(2^16) + 1844259 /(2^16) + 4005892 /(2^16) + 7546905 /(2^16) + 14629148 /(2^16) + 15078164 /(2^16)") + Application.Evaluate("7477520 /(2^16) + 3158785/(2^16) + 1258795/(2^16) + 538914/(2^16) + 396079/(2^16) + 12305/(2^16) + 1555/(2^16) + 258/(2^16) + 8/(2^16) + 4/(2^16)")
  • @Taelsin 这很奇怪。我按照你说的做了,并写在立即,它在那里工作,但当程序本身试图运行它时,我得到错误 2015。

标签: vba calculation


【解决方案1】:

你能把它贴在一个牢房里再读一遍吗?

Sub test()

    Dim s As String

    s = "0 /(2^16) + 3 /(2^16) + 53 /(2^16) + 139573 /(2^16) + 1844259 /(2^16) + 4005892 /(2^16) + 7546905 /(2^16) + 14629148 /(2^16) + 15078164 /(2^16) + 7477520 /(2^16) + 3158785/(2^16) + 1258795/(2^16) + 538914/(2^16) + 396079/(2^16) + 12305/(2^16) + 1555/(2^16) + 258/(2^16) + 8/(2^16) + 4/(2^16)"

    Sheet1.Range("A1").Formula = "=" & s

    Debug.Print Sheet1.Range("A1").Value

    Sheet1.Range("A1").ClearContents

End Sub

【讨论】:

  • 这可能是一个解决方案,但我试图让这部分代码远离工作表,直到我看不到其他方法。
【解决方案2】:

鉴于加法是可交换的,你能不计算一半的表达式(最多 3158785/(2^16)),将结果分配给一个变量,然后计算表达式的其余部分并将其添加到前面的结果中吗?

【讨论】:

  • 在当前状态下,由于隐含,我无法做到这一点。
  • 好的。鉴于你所有的术语都有相同的分母,你能不能把所有的分子相加,然后有一个术语……那应该短得多!
  • 可能是一个解决方案,但如果用户会更改某些内容,例如添加另一个不起作用的运算符
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2021-01-05
  • 2012-04-16
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多