如何修改Worksheet_Change代码实现同行指定单元格值复制
Excel VBA:编辑B列单元格时同步同行W列值到C列
你只需要对原代码做核心调整,就能实现需求,同时避免重复代码和循环触发问题:
Private Sub Worksheet_Change(ByVal Target As Range) ' 限定处理范围为B2到B888的单元格变更 If Not Intersect(Target, Range("b2:b888")) Is Nothing Then Application.EnableEvents = False ' 关闭事件,防止修改C列时重复触发Change事件 On Error Resume Next ' 错误捕获,确保后续能恢复事件 If Target.Value = "" Then Target.Offset(0, 1).Value = "" ' B列清空时,同步清空C列 Else ' 复制同行W列的值到C列:Offset(0,21)是因为W列在B列右侧第21列(B为第2列,W为第23列) Target.Offset(0, 1).Value = Target.Offset(0, 21).Value End If Application.EnableEvents = True ' 恢复事件触发 On Error GoTo 0 ' 重置错误捕获 End If End Sub
关键改动说明:
- 新增
Application.EnableEvents = False/True:修改C列会再次触发Worksheet_Change事件,关闭事件能避免代码循环执行。 - 替换时间戳逻辑为
Target.Offset(0, 21).Value:通过Offset方法自动定位当前行的W列单元格,无需为每个行单独编写代码。 - 保留原空值处理逻辑:B列单元格清空时,C列同步清空,保持逻辑一致性。
内容的提问来源于stack exchange,提问作者Arvy
相关产品推荐
相关产品推荐

