Me parece que lo que tu dices que pulsas es el tabulador para ir pasando de un textbox a otro, lo que si que genera un evento lostfocus.
No entiendo de bases de datos, de modo que no sé como saber si el dni ha sido encontrado, pero creo que si deslias un poco el código igual encuentras el fallo.
Quedaría algo así:
Código :
Ver originalPrivate Sub txtdni_LostFocus()
If Len(txtdni.Text) < 8 Then
MsgBox "Ingrese un DNI Correcto", vbInformation, ""
txtdni.SetFocus
Else
Dim dni As ADODB.Recordset
Set dni = New ADODB.Recordset
dni.Open "select * from clientes where dni='" & txtdni.Text & "'", db, adOpenDynamic, adLockBatchOptimistic
If Not(dni.EOF) Then
MsgBox "DNI Ya Existe PorFavor Ingresar Otro", vbCritical, "Error"
txtdni.SetFocus
End If
End If
End Sub
Quizá el dni nunca llega con 8 caracteres o más.