Hola, tengo problema con VLOOKUP. Una aplicación en VBA para EXCEL. La búsqueda no es correcta

El código está así:

Private Sub txtNumFac_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngcad, lngcer, errnum As Integer
Dim ceros, cadena, encontró, error As String
cadena = "000000000"
lngcad = Len(txtNumFac.Value)
lngcer = 9 - lngcad
ceros = Left(cadena, lngcer)
txtNumFac.Value = ceros & txtNumFac.Value ' El número debe contener 9 dígitos
encontró = Application.WorksheetFunction.VLookup(txtNumFac.Value, Range("datos_factura"), 4) ' El Rango esta marcado para toda la hoja e incluye las celdas ocupadas

El problema: Si ingreso un valor que ya se ha registrado en la hoja activa de excel, En la caja de mensajes (MSGBOX) me lo indica, pero si no encuentra el valor, me lee la 4ta columna de la ultima linea con datos.

He tratado de evaluar el retorno de la variable "encontró" sin resultado.

Si tienen algo de tiempo, sobretodo por las fechas y saben como manejar este error, lo voy ha agradecer mucho.

Feliz 2014 pra todos, que sea abundante en éxitos y logros

Guillermo

1 respuesta

Respuesta
1

La función Vlookup tiene un 4to argumento, que indica si la búsqueda será exacta o aproximada.

Cuando le falta, como en tu caso, te devolverá el valor anterior más aproximado.

Así que agrega FALSE como 4to argumento.

encontró = Application.WorksheetFunction.VLookup(txtNumFac.Value, Range("datos_factura"), 4, False)

Otro detalle: con el nro 4 estás indicando que te devuelva la 4ta col del rango llamado 'datos_factura'... también controla que eso sea lo correcto.

Y por último recordarte que los txt guardan sus valores como texto. Si en tu rango tenés valores numéricos, debieras convertir el txtNumFac en valor quedando todo así:

encontró = Application.WorksheetFunction.VLookup(Val(txtNumFac.Value), Range("datos_factura"), 4, False)

Espero que con esto lo resuelvas.

Sdos y feliz año para ti también.

Muchas gracias por tu pronta respuesta, en efecto, el 4to argumento corrigió el problema al devolverme "Error 2042"

Nuevamente, muchas gracias y un año 2014 lleno de éxitos.

Guillermo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas