Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 方法';相交';对象的'_全球';在工作表内失败';s模块--未识别活动表_Vba_Excel_Intersect - Fatal编程技术网

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-just
Target.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