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
相关产品推荐
相关产品推荐

