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

时间:2015-10-26 07:24:04

标签: excel vba excel-vba events

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

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

有办法吗?在工作簿模块中实现它并没有触发任何内容。

2 个答案:

答案 0 :(得分:3)

使用Workbook_SheetChange事件宏。 Sh 是传入的Worksheet Object目标是接收到更改的一个或多个单元格。一个简单的With ... End With statement应该足以本地化接收更改的工作表。

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

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 property或工作表.Name property影响的工作表。除非您锁定工作簿结构以便无法重新排序工作表,否则不建议使用Worksheet.Index property

答案 1 :(得分:2)

您应该使用:

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

它与Sheet_Change事件类似,只是代替Me.,您将使用Sh.来引用触发事件的工作表。