Excel VBA问题:删除Prod_List行时无法同步复制至DeletedList
宏功能修复方案:删除行同时复制到归档表
问题核心原因
你的宏出现“二选一”故障,本质是操作顺序错误或行引用失效:
- 若先删除原行再复制,原行已被移除,自然无法复制内容;
- 若复制代码逻辑依赖固定行号,删除后行号移位会导致后续操作中断。
修复后的完整宏代码
Sub Delete_Product() Dim wsSummary As Worksheet Dim wsProd As Worksheet Dim wsDeleted As Worksheet Dim targetRow As Range Dim confirmResult As VbMsgBoxResult Dim lastDeletedRow As Long ' 绑定工作表对象 Set wsSummary = ThisWorkbook.Sheets("Summary") Set wsProd = ThisWorkbook.Sheets("Prod_List") Set wsDeleted = ThisWorkbook.Sheets("DeletedList") ' 弹出删除确认提示 confirmResult = MsgBox("确定要删除选中的产品吗?", vbYesNo + vbQuestion, "删除确认") If confirmResult <> vbYes Then Exit Sub ' 定位Prod_List中要删除的目标行(示例:通过Summary的A1单元格产品ID匹配) Set targetRow = wsProd.Columns("A").Find(What:=wsSummary.Range("A1").Value, LookIn:=xlValues, LookAt:=xlWhole).EntireRow ' 先复制目标行到DeletedList的最后一行 lastDeletedRow = wsDeleted.Cells(wsDeleted.Rows.Count, 1).End(xlUp).Row + 1 targetRow.Copy Destination:=wsDeleted.Cells(lastDeletedRow, 1) ' 再删除Prod_List中的目标行 targetRow.Delete Shift:=xlUp ' 清理Summary界面(示例:清空输入框、重置选中状态) wsSummary.Range("A1").ClearContents wsSummary.Activate wsSummary.Range("A1").Select End Sub
关键修复要点
- 先复制再删除:必须在原行被删除前完成复制,确保数据源存在;
- 用Range对象锁定目标行:不要依赖固定行号,用
Find或选中对象定位行,避免行号移位导致引用失效; - 正确定位归档表空行:用
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)找到DeletedList的最后一个空行,避免覆盖已有数据; - 确认提示逻辑:通过
MsgBox返回值判断用户选择,取消则直接退出宏。
内容的提问来源于stack exchange,提问作者Caio
相关产品推荐
相关产品推荐

