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

Excel按钮宏求助:将F列值为Completed的行移至其他工作表

修正Excel宏:移动Completed行到指定工作表

错误根源

  1. 下标越界(Run-time error '9'):最可能是"Main Sheet"或"Removed Items"工作表名称拼写与实际不符,或是Removed Items表为空时,Range("A1").End(xlDown)触发的范围溢出。
  2. 筛选列完全错误:需求是判断F列值,但原代码筛选区域为$B$2:$AS$65336并设置Field:=40,完全偏离目标列。
  3. 依赖Select/ActiveSheet:这类操作极易因工作表切换出错导致异常,稳定性极差。
  4. 空表处理缺失:当目标表无数据时,End(xlDown)会跳到Excel最后一行,后续Offset操作超出有效范围。

修正后的宏代码

Sub MoveCompletedRows()
    Dim wsMain As Worksheet
    Dim wsRemoved As Worksheet
    Dim lastRowMain As Long
    Dim lastRowRemoved As Long
    Dim filterRange As Range
    
    ' 绑定工作表(务必确保名称与Excel中完全一致)
    Set wsMain = ThisWorkbook.Worksheets("Main Sheet")
    Set wsRemoved = ThisWorkbook.Worksheets("Removed Items")
    
    ' 清除主表已有筛选
    If wsMain.AutoFilterMode Then wsMain.AutoFilterMode = False
    
    ' 获取主表数据最后一行(基于A列)
    lastRowMain = wsMain.Cells(wsMain.Rows.Count, "A").End(xlUp).Row
    ' 定义筛选范围:A2到I列最后一行(匹配你的A-I列数据范围)
    Set filterRange = wsMain.Range("A2:I" & lastRowMain)
    
    ' 筛选F列(第6列)值为COMPLETED的行
    filterRange.AutoFilter Field:=6, Criteria1:="COMPLETED"
    
    ' 处理无符合条件行的情况
    On Error Resume Next
    filterRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
    On Error GoTo 0
    
    ' 定位目标表下一个空白行
    lastRowRemoved = wsRemoved.Cells(wsRemoved.Rows.Count, "A").End(xlUp).Row
    ' 空表时从A2开始粘贴(避免覆盖表头)
    If lastRowRemoved < 2 Then lastRowRemoved = 1
    
    ' 粘贴数据
    wsRemoved.Cells(lastRowRemoved + 1, "A").PasteSpecial xlPasteAll
    
    ' 删除主表中已移动的行
    Application.DisplayAlerts = False
    filterRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Application.DisplayAlerts = True
    
    ' 关闭筛选
    wsMain.AutoFilterMode = False
    
    ' 清理剪贴板
    Application.CutCopyMode = False
End Sub

核心优化点

  • 稳定的工作表引用:直接通过ThisWorkbook.Worksheets绑定工作表,彻底避免ActiveSheet的不确定性,同时强制要求工作表名称与实际一致。
  • 精准筛选范围:以你实际使用的A-I列为筛选范围,F列为该区域第6列,确保筛选逻辑正确。
  • 空表容错处理:判断目标表是否为空,避免End(xlDown)导致的溢出错误。
  • 移除Select操作:全程使用对象引用操作,消除人为操作或切换工作表带来的异常。
  • 错误捕获:处理无符合条件行的场景,防止SpecialCells触发额外错误。

内容的提问来源于stack exchange,提问作者user22809496

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:35:57