Excel - Error 1004 Application.WorksheetFuntion.VLookup

 
Vista:
Imágen de perfil de JAVIER

Error 1004 Application.WorksheetFuntion.VLookup

Publicado por JAVIER (2 intervenciones) el 24/02/2023 00:24:17
Buenas tardes, aca expongo mi problema, soy nuevo en esto y estoy creando un userform en vba por primera vez en excel, me tope con algunos errores que logre solucionar, incluyendo el desbordamiento, por lo cual tuve que cambiar Dim CEDULA As Intenger por Variant. Ya que la cantidad de digitos no era soportada por Intenger por lo que vi.
Ahora bien el error que tengo en este momento es al momento de buscar en

Dim CEDULA As Variant

CEDULA = TextCedula.Value

Me.TextNombre = Application.WorksheetFunction.VLookup(CEDULA, Sheets("BD").Range("A:H"), 2, 0)

Que se supone cuando selecciono una fila de la lista señalada me agrega el valor al cuadro de texto de CEDULA y este valor con VLookup me deberia llenar el cuadro de texto de Nombre en base al dato anteriormente seleccionado (CEDULA).
Tengo entendido que podría ser el rango ya lo verifique.
En parte de mi tabla de excel hay un campo que tiene BASICO-I o 2023-I
Tengo entendido esto podría generar error lo quite pero aun asi no funciono,
Noc si se deba utilizar Otro como Index para esto y como seria?
Agradezco de antemano toda la ayuda prestada.

Como verán en las imágenes al eliminar el On Error Resume Next me salta lo que no me deja avanzar.

3
2
HOJA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Private Sub BT_Agregar_Click()
 
UserForm1.Height = 477
Me.TextCedula.SetFocus
 
 
End Sub
_______________________________________
 
Private Sub BT_AgregarDos_Click()
 
Sheets("BD").Range("A6").EntireRow.Insert
 
Range("A6").Value = Me.TextCedula.Value
Range("B6").Value = Me.TextNombre.Value
Range("C6").Value = Me.TexApellido.Value
Range("D6").Value = Me.TexTelefono.Value
Range("E6").Value = Me.TexDireccion.Value
Range("F6").Value = Me.TexPeriodo.Value
Range("G6").Value = Me.TexModulo.Value
Range("H6").Value = Me.TexNota.Value
 
Me.Lista.RowSource = "DATOS"
Me.Lista.ColumnCount = 9
 
Me.TextCedula.Value = Empty
Me.TextNombre.Value = Empty
Me.TexApellido.Value = Empty
Me.TexTelefono.Value = Empty
Me.TexDireccion.Value = Empty
Me.TexPeriodo.Value = Empty
Me.TexModulo.Value = Empty
Me.TexNota.Value = Empty
 
Me.TextCedula.SetFocus
 
UserForm1.Height = 300
 
End Sub
___________________________________________
 
Private Sub BT_Modificar_Click()
 
UserForm1.Height = 477
Me.TextCedula.SetFocus
 
End Sub
 
Private Sub Lista_Click()
 
Dim CEDULA As Variant
CEDULA = Lista.List(Lista.ListIndex, 0)
 
Me.TextCedula = CEDULA
 
 
 
End Sub
___________________________________________
 
Private Sub TextCedula_Change()
 
On Error Resume Next
 
Dim CEDULA As Variant
 
CEDULA = TextCedula.Value
 
Me.TextNombre = Application.WorksheetFunction.VLookup(CEDULA, Sheets("BD").Range("A:H"), 2, 0)
 
 
 
 
 
End Sub
____________________________________
 
Private Sub UserForm_Activate()
 
Me.Lista.RowSource = "DATOS"
Me.Lista.ColumnCount = 9
 
UserForm1.Height = 300
 
Me.Lista.ColumnHeads = True
 
 
End Sub
____________________________________________
 
Private Sub UserForm_Click()
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pere

Error 1004 Application.WorksheetFuntion.VLookup

Publicado por Pere (5 intervenciones) el 24/02/2023 16:14:37
Creo que esto se debe a que el resultado es #N/A, y es posible que sea debido al tipo de la variable.
Primero prueba de hacer el siguiente cambio
1
2
3
4
5
6
7
8
9
10
Private Sub TextCedula_Change()
   'On Error Resume Next >> conviene no utilizar esta línea
   'Definimos correctamente la variable como Long, ya que debe ser un valor numérico superior a lo que nos ofrece el tipo Integer
   Dim CEDULA As Long
 
   'CLng convierte el valor string de la celda TextCedula en un valor numérico Long
   CEDULA = CLng(TextCedula.Value)
 
   Me.TextNombre = Application.WorksheetFunction.VLookup(CEDULA, Sheets("BD").Range("A:H"), 2, 0)
End Sub

Si sigue apareciendo el error, asegúrate de que la función cumple con lo que indica la página web de Microsoft: Función VLookup

Si aún así, no hay manera, es recomendable que adjuntes el archivo para que podamos examinarlo mejor y ver qué sucede mediante los puntos de interrupción.

¡Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de JAVIER

Error 1004 Application.WorksheetFuntion.VLookup

Publicado por JAVIER (2 intervenciones) el 24/02/2023 20:41:21
Muchas gracias por tomar tu tiempor para responder, me funciono lo que me indicaste, ahora podre continuar con mi proyecto.
Tengo una pregunta, long es una variable numerica unicamente por lo que he leido, en el caso que requiera colocar una letra de antemano para que sea V17735000 por ejemplo, Ya que en Venezuela las cedulas o Rif van por Iniciales V, E, J, G. Tal vez el campo pueda ser usado de esta forma como haria?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pere

Error 1004 Application.WorksheetFuntion.VLookup

Publicado por Pere (5 intervenciones) el 25/02/2023 12:00:25
Hola Javier,
El uso correcto de las variables es muy importante, y es uno de los primeros puntos que hay que entender si sigues con el proyecto o bien lo vas ampliando. Los tipos pueden ser pueden ser según lo especificado en esta tabla.

Comprobarás que según lo que necesites, deberás declarar la variable de una manera u otra. Cuando desarrollas programas muy simples y se está aprendiendo, es importante ser muy cuidadoso con ello, ya que de esta manera se comprende mejor el funcionamiento.

El tipo Variant hay que saber usarlo, ya que admite cualquier tipo, pero el “todo vale” no es una buena opción para que funcione correctamente y su uso excesivo puede llevar problemas de rendimiento, eficiencia e incluso de no lograr encontrar un error de compilación o bien que arroje resultados incoherentes.

En tu código usas Variant, pero debemos saber exactamente qué va a contener la celda CEDULA y qué vamos a hacer con esos datos. Si su función final son cálculos, deberemos declarar la variable como numérica (Byte, Integer, Decimal, Long, Double…). Si su función no conlleva cálculos de este tipo, pero tienes claro que también puede ser un número (como indicas en tu mensaje), puede que necesites declararla con String.

Ahora bien, si la declaras como Variant, para que el compilador entienda realmente cuáles son tus intenciones y se mueva dentro de unos parámetros entendibles, necesitarás en algunos casos hacer conversiones explícitas en ciertas partes del código.

Date cuenta que CEDULA recoge el valor de un TextBox. Estos componentes tienen letras, por lo tanto, hay que indicarle a CEDULA que lo que va a recoger del TextBox será un número o un texto (según tus intenciones).

CLng convierte esos datos de texto a Long para que CEDULA tenga un tipo de datos Long y pueda trabajar posteriormente con la función VLookup.

Puede que la App sea más estable si utilizas CEDULA como String, ya que puedes encontrarte con valores como V17735000.
En caso de ser un String, deberás asegurarte de hacer algunos ajustes más, como recortar el texto (función Trim) o convertir a mayúscula (función UCASE), o limpiar el texto (función Replace), ya que no es lo mismo “V17735000” que “V 17735000” que “V 17 73 50 00”, que “ V17735000 ”.

Conversiones.

¡Ánimos con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar