首页 > 解决方案 > 我可以将多个宏放在一个中吗?

问题描述

我想创建一个工作表,如果单元格中的内容发生变化,我的行会在其旁边的列中获取时间戳。

我在以下宏中做错了什么?第一个宏独立工作,但如果我添加几个宏就不行。


Sub Update01()

Sub Worksheet_Change(ByVal Target As Range)    
    If Target.Column <> 1 Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub

    With Target.Offset(0, 1)    
        .Value = Now
        .NumberFormat = "MM/DD/YYYY hh:mm AM/PM"    
    End With
End Sub


Sub Update02()
    If Target.Column <> 3 Then Exit Sub
    If Target.Cells.Count > 3 Then Exit Sub

    With Target.Offset(0, 3)    
        .Value = Now
        .NumberFormat = "MM/DD/YYYY hh:mm AM/PM" 
    End With    
End


Sub Main()
    Call Update01
    Call Update02
End Sub

标签: excelvba

解决方案


您可能打算执行以下操作

Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    On Error Goto ENABLE_EVENTS
    Application.EnableEvents = False

    If Target.Column = 1 Then
        With Target.Offset(0, 1)    
            .Value = Now
            .NumberFormat = "MM/DD/YYYY hh:mm AM/PM"    
        End With
    ElseIf Target.Column = 3
        With Target.Offset(0, 3)    
            .Value = Now
            .NumberFormat = "MM/DD/YYYY hh:mm AM/PM" 
        End With    
    End If
ENABLE_EVENTS:
    Application.EnableEvents = True
End Sub

请注意,Application.EnableEvents = False在向单元格写入值之前需要这样做,否则这会Worksheet_Change一遍又一遍地触发。

另请注意,这Worksheet_Change是一个事件。这意味着只要工作表中的单元格值发生更改,它就会自动运行。您不能手动运行此过程,也不能Call这样做。


推荐阅读