Excel VBA报错:计算每行指定区域最值时触发运行时错误'1004'
解决Excel VBA Runtime Error 1004的问题
嘿,我来帮你搞定这个VBA报错的问题~你遇到的1004错误,核心原因是Range对象的地址写法错误,另外还有两处可以优化的地方,我给你拆解一下:
错误原因分析
无效的Range地址拼接
你写的.Range("BU1:BU1 +(LastRow)")是把变量LastRow直接嵌在字符串里,VBA会把整个BU1 +(LastRow)当成纯文本地址,这显然不是合法的单元格范围,自然触发1004错误。正确的做法是用字符串连接符&把固定列标和变量值拼接起来。LastRow获取的可靠性问题
用.Range("A1").End(xlDown).Row如果A列中间有空行,会错误地把空行上方的行当成最后一行,建议改成从列A的底部往上找,这样能准确获取真正的最后一行数据。BV列范围过于宽泛
.Range("BV1:BV1048576")会填充整个BV列,既浪费性能,还可能覆盖原有数据,应该和BU列一样限制到LastRow。
修正后的完整代码
With ThisWorkbook.Sheets("API-VAL") ' 更可靠的LastRow获取方式:从A列最后一行往上找 LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' 正确拼接Range地址,填充Max公式 .Range("BU1:BU" & LastRow).Formula = "=MAX(BD1:BS1)" ' 同样限制BV列范围到LastRow,填充Min公式 .Range("BV1:BV" & LastRow).Formula = "=MIN(BD1:BS1)" End With
额外提示
- 注意函数名的大小写:VBA里
Max和Min其实不区分大小写,但写成MAX和MIN更符合Excel公式的常规写法,避免混淆。 - 如果你的数据是从第2行开始(第1行是表头),记得把公式的起始行改成
BU2:BU" & LastRow和BV2:BV" & LastRow,对应的公式改成=MAX(BD2:BS2)和=MIN(BD2:BS2)。
内容的提问来源于stack exchange,提问作者JLauchlan
相关产品推荐
相关产品推荐

