修改VBA Worksheet_Change代码:检测日期触发Yes/No弹窗并执行行迁移
VBA代码修改方案
修改后功能说明
当第8列(H列)的单个单元格被更新为日期格式时,弹出Yes/No确认弹窗;用户选择"Yes"后,将该行C到H列复制到"S2"工作表的下一行,并删除原行。
修改后的完整代码
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅处理单个单元格更新 If Target.CountLarge > 1 Then Exit Sub ' 检测目标单元格是否为第8列、行号大于1且内容为日期 If Target.Column = 8 And Target.Row > 1 And IsDate(Target.Value) Then Application.EnableEvents = False ' 禁用事件,防止删除行时重复触发 ' 弹出确认弹窗,获取用户选择 If MsgBox("确认复制此行到S2工作表并删除原行吗?", vbYesNo + vbQuestion, "操作确认") = vbYes Then ' 复制C到H列到S2的下一行 Range(Cells(Target.Row, "C"), Cells(Target.Row, "H")).Copy _ Sheets("S2").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) ' 删除当前行 Rows(Target.Row).Delete End If Application.EnableEvents = True ' 恢复事件触发 End If End Sub
关键修改点
- 日期检测:使用
IsDate(Target.Value)判断单元格内容是否为有效日期,兼容Excel识别的各种日期格式 - 弹窗逻辑:通过
MsgBox的返回值判断用户选择,只有返回vbYes时才执行复制删除操作 - 事件控制:在弹窗前禁用事件,避免删除行时触发
Worksheet_Change事件导致代码循环执行,操作完成后恢复事件启用
内容的提问来源于stack exchange,提问作者James Lyden
相关产品推荐
相关产品推荐

