请求修改VBA代码:插入缺失日期行并复制指定列下方数据
修改后的VBA代码及优化说明
没问题,我帮你调整了VBA代码,让插入的新行自动复制下方行的A至C列、E至L列数据。同时还优化了一些细节,避免潜在的小问题,下面是完整代码:
Dim wks As Worksheet Set wks = Worksheets("NAV_REPORT") Dim lastRow As Long lastRow = wks.Range("D2").End(xlDown).Row For i = lastRow To 2 Step -1 Dim curcell As Date, prevcell As Date curcell = wks.Cells(i, 4).Value prevcell = wks.Cells(i - 1, 4).Value Do Until curcell - 1 <= prevcell wks.Rows(i).Insert xlShiftDown ' 复制下方行的A至C列到新行 wks.Range(wks.Cells(i + 1, 1), wks.Cells(i + 1, 3)).Copy _ Destination:=wks.Range(wks.Cells(i, 1), wks.Cells(i, 3)) ' 复制下方行的E至L列到新行 wks.Range(wks.Cells(i + 1, 5), wks.Cells(i + 1, 12)).Copy _ Destination:=wks.Range(wks.Cells(i, 5), wks.Cells(i, 12)) ' 填充新行的D列日期 curcell = wks.Cells(i + 1, 4).Value - 1 wks.Cells(i, 4).Value = curcell Loop Next i
关键改动&优化点:
- 新增数据复制逻辑:在插入新行后,立刻把原下方行(插入后变为
i+1行)的A-C列、E-L列数据复制到新插入的i行,完美匹配你要的需求。 - 变量类型声明:给
curcell和prevcell加上Date类型声明,比默认的变体类型更严谨,避免日期相关的类型错误。 - 工作表前缀规范:所有单元格/范围操作都加上
wks前缀,确保代码始终针对NAV_REPORT工作表执行,不会因为当前活动工作表变化而出错。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

