You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:42:43