Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 检查更改事件时出现运行时错误424_Vba_Excel - Fatal编程技术网

Vba 检查更改事件时出现运行时错误424

Vba 检查更改事件时出现运行时错误424,vba,excel,Vba,Excel,我创建了一个程序,用于查找a列或I列中要更改的项。如果列I发生更改,则会删除该行并将其移动到新图纸。如果列A发生更改,它应该对所有数据进行排序。但是,当调用第二个Application.Intersect(KeyCells2,Range(Target.Address))时,它会出错,告诉我有一个运行时错误424。为什么会这样?它似乎有一个关键单元格范围和一个target.address Private Sub Worksheet_Change(ByVal Target As Range)

我创建了一个程序,用于查找a列或I列中要更改的项。如果列I发生更改,则会删除该行并将其移动到新图纸。如果列A发生更改,它应该对所有数据进行排序。但是,当调用第二个
Application.Intersect(KeyCells2,Range(Target.Address))
时,它会出错,告诉我有一个运行时错误424。为什么会这样?它似乎有一个关键单元格范围和一个target.address

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim KeyCells2 As Range
    Dim LastRowCompleted As Long
    Dim RowToDelete As Long
    Dim CurCell As String
    RowToDelete = 0
    LastRow = Sheets("Current").Cells(Sheets("Current").Rows.Count, "A").End(xlUp).Row
    LastRowCompleted = Sheets("completed").Cells(Sheets("completed").Rows.Count, "A").End(xlUp).Row
    LastRowCompleted = LastRowCompleted + 1 'Next row after last row
    Set KeyCells = Range("I3:I16384")
    Set KeyCells2 = Range("A3:A16384")
    CurCell = ActiveCell.Address

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        Application.EnableEvents = False

        'Cut and Paste Row
        Target.EntireRow.Copy Sheets("completed").Range(LastRowCompleted & ":" & LastRowCompleted)
        'Mark to delete row
        RowToDelete = Target.EntireRow.Row

        Call DeleteRow(RowToDelete)

    Application.EnableEvents = True

    End If

    Range(CurCell).Select

    If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then
        Application.EnableEvents = False

                'Sort
MsgBox "lastrow completed: " & LastRow
        Range("A3:Z" & LastRow).Select
    ActiveWorkbook.Worksheets("current").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("current").Sort.SortFields.Add Key:=Range("A3:A" & LastRow) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("current").Sort.SortFields.Add Key:=Range("B3:B" & LastRow) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("current").Sort.SortFields.Add Key:=Range("E3:E" & LastRow) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("current").Sort
        .SetRange Range("A3:J" & LastRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    Range(CurCell).Select

    Application.EnableEvents = True

    End If

End Sub

Sub DeleteRow(Row As Long)
    If Row > 0 Then
        Rows(Row).EntireRow.Delete Shift:=xlUp
    End If
End Sub

如果删除第一个
If
块中的行,则
Target
不再存在,因此不能在第二个
If
块中使用它

作为修复,您可以在删除行后退出Sub


另外,如果您试图编辑数据,“自动排序”似乎会非常烦人……

尝试
如果不相交(KeyCells2,Target)则什么都不是,然后改为
。此外,您还可以将
行(行)。EntireRow.Delete Shift:=xlUp
更改为
行(行)。Delete Shift:=xlUp
@ShaiRado似乎没有帮助。我仍然得到同样的错误。我有一种感觉,
Range(Target.Address)
没有得到值。你不需要使用
Range(Target.Address)
,因为
Target
已经定义为
Range