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

5
有没有一种方法可以全局安装一个更改事件,以触发每个工作表上的更改?
我有一个包含52个工作表的工作簿,我希望触发相同的事件处理程序。使用中央模块编写代码可以帮助管理触发器代码,但我不想将代码添加到每个单独的工作表中。
有没有一种方法可以实现?在工作簿模块中实现它并没有触发任何内容。

4
你应该使用Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range),它的功能类似于Sheet_Change事件,只不过你会使用Sh.来描述触发事件的工作表,而不是使用Me.! ;) - R3uK
看起来好像行得通,您想把它作为一个答案记录下来吗? - Spurious
2个回答

5
使用Workbook_SheetChange事件宏。Sh是传递的Worksheet ObjectTarget是接收到更改的单元格或单元格。一个简单的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 列。新创建的工作表将立即受到影响。您可以通过它们的 Worksheet .CodeName 属性 或 Worksheet .Name 属性 解析受影响的工作表。不建议使用 Worksheet.Index 属性,除非锁定工作簿结构,以防工作表被重新排序。

3

你应该使用:

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

它的工作方式类似于 Sheet_Change 事件,但是你需要使用 Sh. 来引用触发该事件的工作表,而不是 Me.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接