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

Excel VBA 按单元格大于0条件跨表复制内容及代码排错

VBA代码报错排查与修复

原代码存在的问题

  • 循环逻辑错误:For循环本身会自动迭代i变量,在If分支中手动执行i = i + 1会导致隔行跳过,出现漏判的问题
  • 列索引错误:G列对应的列号是7,原代码写的Cells(i, 10)取的是J列的值,完全不符合取姓名的需求
  • 单元格引用语法错误:Target.Cells("A" & j)写法不合法,Cells方法参数应为(行号,列号),如果要用地址字符串需要用Range方法
  • 缺少边界判断:目标区域仅为A82:A104,没有判断j是否超出104的限制,可能会把内容写到指定区域外
  • 未恢复ScreenUpdating:代码开头关闭了屏幕刷新,运行结束没有重新开启,会导致Excel界面操作异常

修正后可用代码

Sub option_list()
    Dim Source As Worksheet, Target As Worksheet
    Dim i As Long, j As Long

    Application.ScreenUpdating = False
    Set Source = ActiveWorkbook.Worksheets("Sheet1")
    Set Target = ActiveWorkbook.Worksheets("Sheet2")

    j = 82 ' 目标区域起始行

    For i = 3 To 25 ' 遍历Sheet1指定行范围
        ' 判断M列(第13列)值大于0,且目标行不超过104
        If Source.Cells(i, 13).Value > 0 And j <= 104 Then
            ' 直接赋值无需复制粘贴,效率更高也不会占用剪贴板
            Target.Cells(j, 1).Value = Source.Cells(i, 7).Value
            j = j + 1
        End If
    Next i
    
    ' 清空目标区域剩余位置的历史残留数据
    If j <= 104 Then
        Target.Range("A" & j & ":A104").ClearContents
    End If
    
    Application.ScreenUpdating = True
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:12:02