工作簿中每个工作表的工作表更改事件

Worksheet change event for every sheet in the workbook

提问人:Spurious 提问时间:10/26/2015 最后编辑:R3uKSpurious 更新时间:10/26/2015 访问量:12113

问:

有没有办法全局安装在每张工作表上触发的更改事件?

我有一个包含 52 张工作表的工作簿,我想触发相同的事件处理程序。带有代码的中央模块将有助于管理触发器代码,但我不想将代码添加到每个工作表中。

有没有办法做到这一点?在工作簿模块中实现它没有触发任何内容。

VBA Excel 事件

评论

4赞 R3uK 10/26/2015
您应该使用 ,它的工作方式与 Sheet_Change 事件类似,只是您将使用而不是 来描述触发事件的工作表!;)Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)Me.Sh.
0赞 Spurious 10/26/2015
这似乎有效,你想把它作为答案吗?

答:

5赞 user4039065 10/26/2015 #1

使用 Workbook_SheetChange 事件宏。Sh 是传入的工作表对象Target 是收到更改的一个或多个单元格。一个简单的 With ...End With 语句应该足以本地化接收更改的工作表。

一个简单的时间戳事件可能如下所示。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    With Sh
        If Not Intersect(Target, .Columns(1)) Is Nothing Then
            On Error GoTo bm_Safe_Exit
            Application.EnableEvents = False
            Dim rng As Range
            For Each rng In Intersect(Target, .Columns(1))
                rng.Offset(0, 4) = Now
            Next rng
        End If
    End With
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

对任何工作表的 A 列中的单元格所做的任何更改都将导致当前日期时间被放入同一工作表和行的 E 列中。新创建的工作表将立即受到影响。您可以解析受其工作表影响的工作表。CodeName 属性或 Worksheet 。Name 属性。不建议使用 Worksheet.Index 属性,除非锁定工作簿结构,以便无法对工作表重新排序。

3赞 R3uK 10/26/2015 #2

您应该使用:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

它的工作方式与事件类似,只是您将使用来引用触发事件的工作表,而不是 。Sheet_ChangeMe.Sh.