VBA For循环嵌套Do While复制表行仅第一行生效问题求解
根因分析
你的代码核心问题是looper变量仅在所有循环外层初始化1次:处理完第一张表(Var表)的第一行后,looper已经累加到等于managers + 1,后续遍历Var表其他行时,Do While的判断条件looper <= managers永远不成立,所以不会执行复制逻辑,只有第一行能正常复制。
修正后代码
Option Explicit ' 建议开启,强制变量声明,避免拼写错误 Sub 复制重复行() Dim managers As Long, my As Long, looper As Long Dim myTable As ListObject Dim lr As ListRow ' 直接获取Managers表的行数,不需要Select操作 managers = Worksheets("Managers").UsedRange.Rows.Count - 1 Set myTable = Worksheets("Var").ListObjects("var_no_format") my = 1 ' 目标表Var Admin的起始写入行号 ' 遍历Var表每一行 For Each lr In myTable.ListRows ' 每次处理新的Var表行时,重置looper计数器 looper = 1 ' 按Managers表的行数重复复制当前行 Do While looper <= managers lr.Range.Copy Sheets("Var Admin").Range("A" & my) my = my + 1 looper = looper + 1 Loop Next lr ' 释放对象内存 Set lr = Nothing Set myTable = Nothing End Sub
优化说明
- 移除了所有不必要的
Select操作,VBA中直接引用工作表/对象比选中后操作稳定性更高、运行速度更快 - 增加了变量声明和
Option Explicit配置,避免因变量名拼写错误导致的隐蔽Bug - 如果数据量较大,可以在代码开头增加
Application.ScreenUpdating = False、Application.EnableEvents = False,代码结束前恢复对应设置,能大幅提升运行效率
内容的提问来源于stack exchange,提问作者AleksLi
相关产品推荐
相关产品推荐

