You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中ws.Evaluate返回Error 2015,工作表直接输入公式却正常

VBA ws.Evaluate返回Error 2015的问题排查与解决

问题场景

使用VBA的ws.Evaluate方法计算公式字符串时返回Error 2015,但将该字符串直接粘贴到工作表单元格中却能得到预期结果。故障相关代码如下:

tmp_str = eval_arr(row, col)

'this is the string that fails
'tmp_str = "=0.532563*$C$13+0.385719*$D$13+0.387839*$E$13+0.479558*$F$13+0.452192*$J$13+0.528729*$V$13+0.557767*$W$13+0.493665*$X$13+0.460067*$AA$13+0.459862*$AC$13+0.426223*$AD$13+0.368208*$AU$13+0.460067*$AW$13+0.377209*$AX$13+0.44306*$AY$13+0.414292*$BB$13+0.43957*$BC$13"

'this works
ws.Range("I18").value = tmp_str

'If I make tmp_dbl a Variant, I can see the Error 2015
tmp_dbl = ws.Evaluate(tmp_str)

max_weight = WorksheetFunction.Max(max_weight, tmp_dbl)

问题原因

核心原因是Evaluate方法对输入的公式字符串存在255字符长度限制,而Excel单元格本身支持更长的公式(最大可达8192字符),因此直接粘贴到单元格能正常计算,但通过Evaluate执行时触发长度限制,返回Error 2015。

解决方法

针对该场景,可通过按+拆分公式字符串,分别计算每个子表达式后累加的方式绕过长度限制:

tmp_str_arr = Split(eval_arr(row, col), "+")
tmp_dbl = 0
For Each f In tmp_str_arr
    tmp_dbl = tmp_dbl + Evaluate(f)
Next f

max_weight = WorksheetFunction.Max(max_weight, tmp_dbl)

内容的提问来源于stack exchange,提问作者masher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:08:16