如何在同一工作表中合并两个Worksheet_Change宏?
解决方案
当然可以合并成一个宏,同一工作表中不能存在两个同名的Worksheet_Change事件过程,这就是你之前两个宏无法协同工作的原因。
合并后的完整代码如下:
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Dim cRange As Range Dim gRange As Range ' 关闭事件触发,避免修改单元格时再次触发本宏 Application.EnableEvents = False ' 处理C列的修改 Set cRange = Intersect(Target, Me.Range("C:C")) If Not cRange Is Nothing Then For Each cell In cRange Me.Cells(cell.Row, "B").Value = Application.UserName Me.Cells(cell.Row, "A").Value = Format(Date, "dd.mm.yyyy") Next cell End If ' 处理G列的修改 Set gRange = Intersect(Target, Me.Range("G:G")) If Not gRange Is Nothing Then For Each cell In gRange Me.Cells(cell.Row, "F").Value = Application.UserName Me.Cells(cell.Row, "E").Value = Format(Date, "dd.mm.yyyy") Next cell End If ' 恢复事件触发 Application.EnableEvents = True End Sub
关键说明:
- 使用
Me指代当前工作表,让代码更清晰且避免跨工作表的误操作 - 只在宏开头关闭一次
Application.EnableEvents,结尾恢复,减少重复操作 - 分别判断修改是否发生在C列或G列,对应执行不同的填充逻辑
- 保留了原代码中遍历修改单元格的逻辑,支持批量修改多个单元格的场景
内容的提问来源于stack exchange,提问作者Sebi
相关产品推荐
相关产品推荐

