为Excel表格最后一列添加公式时出现Error 1004错误求助
解决VBA设置表格列公式时的1004错误
以下是针对代码中出现的1004错误的排查方向和修复方案:
核对所有列名的准确性
确认代码里用到的列名(Percentage voltooid、Som van Aantal verwacht、Som van Aantal ontvangen2)和表格实际列名完全一致,包括大小写、空格、特殊符号,任何拼写偏差都会触发错误。处理无数据行的表格场景
如果表格只有表头没有数据行,DataBodyRange会返回Nothing,直接赋值公式就会报错。可以先判断并添加空数据行:Sub Calculate() Dim tbl As ListObject Dim sFormula As String Set tbl = Sheets("Bijna afgerond").ListObjects("TEST_RANGE") sFormula = "=[@[Som van Aantal verwacht]]-[@[Som van Aantal ontvangen2]]" ' 检查数据行是否存在,无则添加一行 If tbl.DataBodyRange Is Nothing Then tbl.ListRows.Add End If tbl.ListColumns("Percentage voltooid").DataBodyRange.Cells(1).Formula = sFormula End Sub直接给整列数据区域设置公式(更推荐)
无需单独指定第一个单元格,直接给目标列的DataBodyRange赋值公式,Excel会自动将公式填充到所有数据行,同时避免单个单元格引用的潜在问题:Sub Calculate() Dim tbl As ListObject Dim sFormula As String Set tbl = Sheets("Bijna afgerond").ListObjects("TEST_RANGE") sFormula = "=[@[Som van Aantal verwacht]]-[@[Som van Aantal ontvangen2]]" ' 给整列数据区域设置公式 tbl.ListColumns("Percentage voltooid").DataBodyRange.Formula = sFormula End Sub改用R1C1格式公式(兼容性备选)
如果结构化引用出现兼容性问题,可以切换到R1C1格式的公式,通过列索引定位目标列:Sub Calculate() Dim tbl As ListObject Dim colVerwacht As Integer, colOntvangen As Integer, colTarget As Integer Set tbl = Sheets("Bijna afgerond").ListObjects("TEST_RANGE") ' 获取各列的索引值 colVerwacht = tbl.ListColumns("Som van Aantal verwacht").Index colOntvangen = tbl.ListColumns("Som van Aantal ontvangen2").Index colTarget = tbl.ListColumns("Percentage voltooid").Index ' 检查并添加数据行 If tbl.DataBodyRange Is Nothing Then tbl.ListRows.Add End If ' 用R1C1格式设置公式 tbl.ListColumns("Percentage voltooid").DataBodyRange.FormulaR1C1 = "=RC[" & colVerwacht - colTarget & "]-RC[" & colOntvangen - colTarget & "]" End Sub
内容的提问来源于stack exchange,提问作者Thom Haasert
相关产品推荐
相关产品推荐

