Qué tal?
El primer error que veo en el código es que invocas al método Open y no sabemos si en ese momento la variable
cadena contiene algo y es válido.
De todas formas, el código de error significa que el recordset está vacío; para evitar el mensaje, debes, o bien comprobar la propiedad RecordCount (que en tu ejemplo seguramente te devolverá cero o -1), o bien poner una comprobación:
Código:
If Validacion.EOF Or Validacion.BOF Then
' No hay ningún registro activo
Else
' Todo va bene
End If
Si EOF (
End Of ¿File?
-
Fin de ¿fichero?)es Verdadero, significa que el recordset apunta a la última fila del recordset (ejecutar MoveNext elevaría un error interceptable). Si BOF (
Beginning of F. - Principio de lo que sea) significa que el recordset apunta al registro anterior al primero, es decir, al aire. En este caso, ejecutar MovePrevious es lo que generaría el error. Como puedes deducir, si ambos son verdaderos, es que algo pasa

.
Te recomiendo la segunda forma de comprobación, ya que hay engines de bases de datos que por ODBC siempre devuelven -1 en RecordCount aunque el recordset esté poblado.
Pon siempre un mecanismo de comprobación de este tipo para ahorrarle al usuario mensajes que no va a entender, pero revisa también que la instrucción SQL se concatena correctamente y devuelve al menos una fila.
Y como consejo final, comprueba el estado del recordset así:
If Validacion.State = adStateOpen Then ...
es más legible y eficaz