0
我創建了一個程序,該程序在列A或列I中查找要更改的項目。如果列I發生更改,則會刪除該行並將其移至新工作表。如果列A發生更改,則應對所有數據進行排序。但是,當調用第二個Application.Intersect(KeyCells2, Range(Target.Address))
時,它錯誤地告訴我我有一個運行時錯誤424.爲什麼會發生這種情況?它似乎有一個關鍵單元格範圍和一個target.address。檢查更改事件時的運行時錯誤424
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
嘗試'如果不是相交(KeyCells2,Target)是Nothing Then',此外,您可以將'行(行).EntireRow.Delete Shift:= xlUp'更改爲'行(行)。刪除Shift:= xlUp' –
@ShaiRado似乎沒有幫助。我仍然得到相同的錯誤。我有一種感覺'Range(Target.Address)'沒有得到值是應該如何。 – Brad
您不需要使用'Range(Target.Address)',因爲'Target'已被定義爲'Range' –