Ваша проблема связана с тем, что вы удаляете findvalue , но пытаетесь использовать его в качестве аргумента After: = findvalue с вызовом FindNext.После удаления строки, содержащей findvalue , она больше не доступна для справки.
Вы можете продолжать удалять строки, но последующие вызовы должны быть Range.Find, а не Range.FindNext.
Set findvalue = rgF.Find(What:=Reg4, LookIn:=xlValues, LookAt:=xlWhole)
'if the ID doesn't exist, get out of there
If findvalue Is Nothing Then
Debug.Print "No one has that ID anymore"
Exit Sub
End If
Do
'delete the row that has the ID
findvalue.EntireRow.Delete
Set findvalue = rgF.Find(What:=Reg4, LookIn:=xlValues, LookAt:=xlWhole)
Loop While Not findvalue Is Nothing
Поочередно соберите все диапазоны Find / FindNext в объединение и удалите их все сразу после их сбора.
Dim rgF As Range, allFound As Range, addr As String
Set rgF = Sheet2.Range("F:F")
Set findvalue = rgF.Find(What:=Reg4, LookIn:=xlValues, LookAt:=xlWhole)
If findvalue Is Nothing Then
'If the ID doesn't exist, get out of there
Debug.Print "No one has that ID anymore"
Exit Sub
Else
'there is at least one row to delete
'store original range address
addr = findvalue.Address(0, 0)
'seed the union oof ranges
Set allFound = findvalue
Do
'collect into Union
Set allFound = Union(findvalue, allFound)
'find the next instance
Set findvalue = rgF.FindNext(after:=findvalue)
Loop Until findvalue.Address(0, 0) = addr
'delete all row inthe union
allFound.EntireRow.Delete
End If