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

VBA FormulaArray Range类报错:字符数不足255仍触发Error 1004

解决VBA中ListObject设置FormulaArray触发Error 1004的问题

我来帮你排查这个问题!你遇到的Error 1004大概率是两个常见原因导致的,咱们一步步解决:

1. 公式里的&是关键坑点

你代码里的公式字符串用了&,这是网页场景的HTML转义写法,在VBA中直接写会被当作普通文本,导致公式语法彻底失效——这才是触发1004错误的核心原因之一。先把公式里的&全部替换成VBA和Excel公式里的连接符&。

2. 避免直接给整个DataBodyRange批量赋值数组公式

Excel对ListObject(结构化表格)批量设置数组公式的支持一直不太稳定,哪怕公式长度没超限制也容易报错。更稳妥的方式是:先给列的第一个数据单元格设置数组公式,再用FillDown填充到整个列。

修正后的完整代码

With wsOutdated.ListObjects("Table_Outdated_Stock_Counts")
    ' 先设置列格式为常规
    .ListColumns("Ranging").DataBodyRange.NumberFormat = "General"
    ' 清空原有内容避免干扰
    .ListColumns("Ranging").DataBodyRange.ClearContents
    
    ' 定位到列的第一个数据单元格
    Dim firstDataCell As Range
    Set firstDataCell = .ListColumns("Ranging").DataBodyRange.Cells(1, 1)
    
    ' 设置数组公式(已替换&为&)
    firstDataCell.FormulaArray = "=INDEX(Table_DispoData[[Class]],MATCH([@Article]&[@Site],Table_DispoData[Article]&Table_DispoData[Site],0),1)"
    
    ' 填充到整个数据列
    .ListColumns("Ranging").DataBodyRange.FillDown
End With

额外注意事项

  • 确保执行这段代码时,Table_DispoData已经在当前工作簿中存在(如果它是由前面的宏代码生成的,一定要把这段代码放在生成表格的逻辑之后)。
  • 如果还是报错,可以尝试把结构化引用换成常规单元格引用(比如把Table_DispoData[Article]换成SheetName!$A$2:$A$1000),测试是否是结构化引用的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:08:39