VBA循环动态调整删除范围触发Run-time error '1004'求助
解决Excel VBA的Run-time Error 1004问题
我来帮你搞定这个报错,咱们先拆解问题根源,再给出修正后的代码:
错误原因分析
- 拼写错误:你代码里的
x1Up是致命问题!这里应该是xlUp(是字母L,不是数字1),VBA识别不了x1Up这个常量,直接触发1004错误。 - 范围计算逻辑错误:
num_2 = num + 2这行逻辑不对,每次循环你需要让结束行(原来的80)也跟着加2,而不是用新的num值来计算,不然会导致选区范围混乱。 - 冗余的Select操作:VBA里用
Select和Selection很容易因为选区状态变化出问题,直接操作Range对象才是更可靠的做法。
修正后的代码
Sub Macro2() Dim i As Integer Dim startRow As Integer, endRow As Integer ' 初始化起始和结束行 startRow = 50 endRow = 80 ' 这里可以根据需要调整循环次数,你原代码是循环2次 For i = 1 To 2 ' 直接操作目标区域,无需Select Range("A" & startRow & ":B" & endRow).Delete Shift:=xlUp ' 起始行和结束行各下移2行,符合你要保留两行的需求 startRow = startRow + 2 endRow = endRow + 2 Next i End Sub
代码解释
- 把
num和num_2改成startRow和endRow,变量名更直观,一眼就能看出是区域的起始和结束行。 - 直接用
Range("A" & startRow & ":B" & endRow)定位目标区域,跳过Select步骤,避免不必要的错误。 - 修正了
xlUp的拼写,同时保证每次循环后startRow和endRow都加2,完美实现你要的"保留两行后,下一次循环从A52:B82开始"的需求。 - 如果需要调整循环次数,直接修改
For i = 1 To 2里的数字就行,比如要循环5次就改成To 5。
内容的提问来源于stack exchange,提问作者McMckinson
相关产品推荐
相关产品推荐

