对象'_Global'的方法“相交”在工作表模块内失败 – 无法识别ActiveSheet

我目前使用自制的电子表格来logging我的一天。 每当我插入一个新的活动,它应该计算我上一次活动所花费的时间。

当我每天创build一个新的电子表格时它工作正常,但是现在我正在考虑将电子表格整合到一个月度文件中。

我在同一个电子表格上有一个macrosbutton,刷新我的数据透视表,它总结了我的任务。

不幸的是,一旦我复制了工作表并试图刷新数据透视表,它给了我一个错误消息: Method 'Intersect' of object '_Global' failed

我目前的编码如下:

 Private Sub Worksheet_Change(ByVal Target As Range) 'Stamp Date Dim WorkRng As Range Dim Rng As Range Set WorkRng = Intersect(ActiveSheet.Range("B:B"), Target) If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then If Rng.Offset(-1, 0).Value = "Start" Then Rng.Offset(0, 1).Value = Rng.Offset(-1, 1) Else: Rng.Offset(0, 1).Value = Now Rng.Offset(0, 1).NumberFormat = "h:mm AM/PM" End If Else Rng.Offset(0, 1).ClearContents End If Next Application.EnableEvents = True End If 'Time Format If Target.Cells.Count > 1 Or Target.HasFormula Then GoTo errHandler On Error Resume Next If Not Intersect(Target, Range("C3:C33")) Is Nothing Then Application.EnableEvents = False Target.NumberFormat = "H:MM AM/PM" Application.EnableEvents = True End If On Error GoTo errHandler If WorkRng.Offset(0, 1) > 0 Then WorkRng.Offset(1, 0).Select End If Exit Sub errHandler: ActiveCell.Select End Sub 

debugging亮点: Set WorkRng = Intersect(ActiveSheet.Range("B:B"), Target)

作为VBA的初学者,这些代码大部分来自不同的地方。 结果,我甚至不知道哪里出了问题。 任何援助将非常感激!

你不能使用工作表模块内部的ActiveSheet ,你必须引用该表与Me (就像你在UserForm中做的那样):

 Private Sub Worksheet_Change(ByVal Target As Range) 'Stamp Date Dim WorkRng As Range Dim Rng As Range Set WorkRng = Intersect(Me.Range("B:B"), Target) If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then If Rng.Offset(-1, 0).Value = "Start" Then Rng.Offset(0, 1).Value = Rng.Offset(-1, 1) Else: Rng.Offset(0, 1).Value = Now Rng.Offset(0, 1).NumberFormat = "H:MM AM/PM" End If Else Rng.Offset(0, 1).ClearContents End If Next Application.EnableEvents = True End If 'Time Format If Target.Cells.Count > 1 Or Target.HasFormula Then GoTo errHandler On Error Resume Next If Not Intersect(Target, Me.Range("C3:C33")) Is Nothing Then Application.EnableEvents = False Target.NumberFormat = "H:MM AM/PM" Application.EnableEvents = True End If On Error GoTo errHandler If WorkRng.Offset(0, 1) > 0 Then WorkRng.Offset(1, 0).Select End If Exit Sub errHandler Me.ActiveCell.Select End Sub