VBA R1C1风格编程触发Run-time error '1004'求助
问题排查与解决方案
错误核心原因
出现Run-time error '1004'主要有两个关键问题:
- 公式参数分隔符不兼容:VBA中使用
FormulaR1C1属性时,无论Excel界面语言是什么,公式内的参数分隔符必须用英文逗号,,而非代码里的分号;。分号仅适用于非英文Excel界面的手动输入场景,VBA解析公式时只识别逗号。 - 固定行数的Resize范围错误:代码里用
Resize(5,1)硬编码了5行结果区域,但实际销售员数量由nr变量计算得出,固定值会导致当实际数据行数与5不符时,要么公式写入范围不匹配,要么超出工作表可用区域触发错误。
修正后的代码
Sub Cookies() Dim nr As Integer, nc As Integer nc = WorksheetFunction.CountA(Rows("6:6")) - 1 nr = WorksheetFunction.CountA(Columns("A:A")) - 2 ' 替换分隔符为逗号,并用nr匹配实际数据行数 Cells(5, nc + 2).Resize(nr, 1).FormulaR1C1 = "=SUMIF(R6C1:R16C1,RC[-1],R6C6:R16C6)" End Sub
额外优化建议
- 建议明确指定工作表对象,避免依赖默认激活工作表引发的潜在错误,例如将
Cells(...)改为Sheet1.Cells(...)(替换为你的目标工作表名称)。 - 若销售员数据行数不是固定到第16行,可将公式中的固定范围改为动态匹配:
Dim dataLastRow As Integer dataLastRow = 5 + nr ' 假设第6行是数据起始行 Cells(5, nc + 2).Resize(nr, 1).FormulaR1C1 = "=SUMIF(R6C1:R" & dataLastRow & "C1,RC[-1],R6C6:R" & dataLastRow & "C6)"
内容的提问来源于stack exchange,提问作者Cats
相关产品推荐
相关产品推荐

