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
相关产品推荐
相关产品推荐

