VBA-旁路应用程序。评估限制

VBA-旁路应用程序。评估限制,vba,calculation,Vba,Calculation,所以我得到了一个字符串,其中包含我想计算成和的数值。我尝试使用应用程序。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) + 1

所以我得到了一个字符串,其中包含我想计算成和的数值。我尝试使用
应用程序。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


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

你能将其粘贴在单元格中并读回吗

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

你能不能把它一分为二?为什么不
Application.Evaluate(数学第一部分)+Application.Evaluate(数学第二部分)
?@QHarr抱歉,已更新it@Taelsin想了想,但想不出如何在不破坏任何东西的情况下做到这一点。假设不是“+”,那么我不能拆分它,或者如果计算是8/(6+2),那么也可能会破坏计算。考虑到您的问题,这将起作用:
应用程序。评估(“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)
@Taelsin wierd。我按照你说的做了,并且在即时消息中写了,它工作了,但是当程序本身尝试运行它时,它不工作,然后我得到错误2015。在当前状态下,我不能这样做,因为隐式。好的。既然你所有的项都有相同的分母,你能不能把所有的分子加起来,然后有一个项。。。那应该短得多!这可能是一个解决方案,但如果用户更改某些内容,例如添加另一个无法工作的运算符,这可能是一个解决方案,但我正在尝试将这部分代码从工作表中删除,直到我发现没有其他方法可以这样做。