Vba 方法';相交';对象的'_全球';在工作表内失败';s模块--未识别活动表
我目前使用自制的电子表格来记录我的一天。每次我插入一个新活动时,它都应该计算我在上一个活动中花费的时间 它工作得很好,就像我每天创建一个新的电子表格一样,但是现在我想把电子表格合并成一个每月的文件 我在同一个电子表格上有一个宏按钮,用于刷新汇总任务的透视表 不幸的是,一旦我复制了工作表并尝试刷新透视表,它会给我一条错误消息:Vba 方法';相交';对象的'_全球';在工作表内失败';s模块--未识别活动表,vba,excel,intersect,Vba,Excel,Intersect,我目前使用自制的电子表格来记录我的一天。每次我插入一个新活动时,它都应该计算我在上一个活动中花费的时间 它工作得很好,就像我每天创建一个新的电子表格一样,但是现在我想把电子表格合并成一个每月的文件 我在同一个电子表格上有一个宏按钮,用于刷新汇总任务的透视表 不幸的是,一旦我复制了工作表并尝试刷新透视表,它会给我一条错误消息:object'\u Global'的方法'Intersect'失败 我目前的编码如下: Private Sub Worksheet_Change(ByVal Target A
object'\u Global'的方法'Intersect'失败
我目前的编码如下:
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
调试突出显示:Set WorkRng=Intersect(ActiveSheet.Range(“B:B”),Target)
作为VBA的初学者,这些代码大多是从不同的地方复制的。结果,我甚至不知道出了什么问题。任何帮助都将不胜感激 您不能在工作表模块内部使用
ActiveSheet
,您必须使用Me
引用该工作表(就像您在用户表单中所做的那样):
您不能在工作表模块内部使用
ActiveSheet
,您必须使用Me
引用该工作表(就像您在用户表单中所做的那样):
看起来像是“另一个活动表问题”,如果您试图将不同工作表中的两个或多个范围相交,则出现错误。如果可能的话,尝试摆脱
ActiveSheet
。顺便说一句,我想当新的工作表副本变为活动工作表时,问题就出现了。从这一点上,您可以尝试比较如果ActiveSheet是Target.Worksheet
和如果不只是Target.Worksheet.Activate
(不要这样做)。您将您的私有子工作表的更改(ByVal Target作为范围)
Sub放在哪里?看起来像是“另一个ActiveSheet问题”,如果您试图将不同工作表中的两个或多个范围相交-这是您的错误。如果可能的话,尝试摆脱ActiveSheet
。顺便说一句,我想当新的工作表副本变为活动工作表时,问题就出现了。从这一点上,您可以尝试比较ActiveSheet是否为Target.Worksheet和if not-justTarget.Worksheet.Activate
(不要这样做)。您将您的私有子工作表的更改(ByVal Target作为范围)放在哪里?
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