Evitar error al introducir un texto fuera de la lista de un combobox en vba

Al introducir un texto que no está en la lista desplegable de un combobox, me aparece el siguiente mensaje :

Se ha producido el error "1004" en tiempo de ejecución:

No se puede obtener la propiedad VLookup de la clase WorksheetFunction.

Finalizar - Depurar y me interrumpe el código.

¿Qué código y en que lugar de este código que te envío podría añadirlo para evitar este error?

Mi código es el siguiente :

Private Sub Combobox1_Change()

Dim mercaderías As String

Set RANG = Sheets("HOJA DINÁMICA").Range("A5:G500")

COD = Application.worksheetFunction.VLookup(Combobox1, RANG, 2, False)

SALDO = Application worksheetFunction.VLookup(Combobox1, RANG, 3, False)

TextBox2 = COD

TextBox3 = SALDO

End Sub

1 respuesta

Respuesta
1

Puedes usar el control de errores de VB. Es sencillo pero muy peligroso; me explico.

La instrucción "On error resume next" desactiva el control de errores de VB y permite al programador controlarlos.

Por otro lado "On error goto 0" vuelve a activar el control de errores de VB y el programador se despreocupa.

¿Por qué este rollo? Sencillo, si desactivas el control de errores y no lo vuelves a activar tu programa puede ejecutar código erróneo.

MUY IMPORTANTE: No olvidarse que el programa siempre tiene que devolver el control al VB.

Dicho lo anterior yo pondría un código como el siguiente:

Private Sub Combobox1_Change()
Dim mercaderías As String
Set RANG = Sheets("HOJA DINÁMICA").Range("A5:G500")
' Controlaremos los errores por programa
On Error Resume Next
COD = Application.WorksheetFunction.VLookup(Combobox1, RANG, 2, False)
If Err = 1004 Then
MsgBox "ERROR: El valor de la lista 2 no es válido"
On Error GoTo 0 ' No olvidar que siempre hay que devolver el control al VB
Exit Sub
End If
If Err <> 0 Then ' Es otro error distinto del 1004
MsgBox "ERROR no controlado: " & Error$
On Error GoTo 0 ' No olvidar que siempre hay que devolver el control al VB
Exit Sub
End If
' Si llega hasta aquí es porque "ERR=0" lo que significa que no hay error.
SALDO = Application.WorksheetFunction.VLookup(Combobox1, RANG, 3, False)
If Err = 1004 Then
MsgBox "ERROR: El valor de la lista 3 no es válido"
On Error GoTo 0 ' No olvidar que siempre hay que devolver el control al VB
Exit Sub
End If
If Err <> 0 Then ' Es otro error distinto del 1004
MsgBox "ERROR no controlado: " & Error$
On Error GoTo 0 ' No olvidar que siempre hay que devolver el control al VB
Exit Sub
End If
' Si pasa por aquí es porque los dos controles anteriores estaban bien.
' Devolvemos el control de errores al VB (insisto, no olvidar nunca)
On Error GoTo 0
TextBox2 = COD
TextBox3 = SALDO
End Sub

Muchas gracias experto santiagomf, la solución que deseaba, me funcionan los combobox de maravilla, ya no me interrumpe el código. Además me lo has explicado estupendamente paso a paso según el código corría.

Excelente.

Gracias de nuevo y un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas