Это общая проблема для Worksheet_Change
-программ, которые изменяют сам лист - это вызовет новый Change
-Event (В этом втором событии target - это полная строка, которая в данный момент удалена, и проверяется значениеa Диапазон с более чем одной ячейкой вызовет эту ошибку 13).
Такие проблемы легко предотвратить: вы должны отключить события во время работы подпрограммы обработки событий.
Обновление : изменен код, чтобы показать, как использовать Copy
без Select
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Application.EnableEvents = False ' Disable events while routine is doing its duty
On Error Goto ChangeExit ' Ensure that events are switched on in any case
Set KeyCells = Range("B:B")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
With Target.Cells(1, 1)
If (.Value = "Complete" Or .Value = "On Hold") Then
Dim lastRow As Long
lastRow = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).row
.EntireRow.Copy Worksheets("Sheet2").Cells(lastRow + 1, 1)
.EntireRow.Delete
End If
End With
End If
ChangeExit:
Application.EnableEvents = True
End Sub