通过VBA添加Excel公式后引用自动上移的问题咨询
问题原因与解决办法
核心问题
你搞错了结构化表格的DataBodyRange索引逻辑:表格的DataBodyRange第一行就是工作表的第二行(表头是工作表第一行),你代码里用Cells(2, 1)指向的是表格第二数据行(工作表第三行),Excel会自动调整公式引用,导致你写的A2被改成A1。
修正代码
直接引用DataBodyRange的第一行单元格,同时用.Formula替代.Value更规范:
' Insert a new column to the left of "Grand Total" Set newCol = tbl.ListColumns.Add(colPosition) ' Name the new column "MX" where X is the count of the total months on the project newColName = "M" & newCol.Index - 2 newCol.Name = newColName ' 指向表格第一数据行(对应工作表第二行) newCol.DataBodyRange.Cells(1, 1).Formula = "=IFERROR(VLOOKUP(A2, INDIRECT(""""'"" & C$1 & """"'!A:B""""), 2, FALSE), """")" newCol.DataBodyRange.Cells(1, 2).Formula = "=SUM(C2:" & ColLetter(newCol.Index) & "2)"
补充说明
- 把
Chr(34)换成双引号转义(""),代码可读性更高,效果完全一致。 - 用
.Formula设置公式是Excel VBA的标准写法,比.Value更稳定,避免格式转换问题。 - 之所以引用上移,是因为你选了表格第二数据行,Excel按相对引用规则自动调整了行号,而
C$1因为锁定了行号所以不受影响。
内容的提问来源于stack exchange,提问作者Toner
相关产品推荐
相关产品推荐

