Excel - Uso de la función DLookup desde un UserForm.

 
Vista:
sin imagen de perfil

Uso de la función DLookup desde un UserForm.

Publicado por Rafael (102 intervenciones) el 07/05/2024 20:45:04
Desde un UserForm de una aplicación pretendo que al seleccionar en el ComboBox contenido en él llamado 'Paciente', una función DLookup me traiga al mismo UserForm desde el que he actuado el ComboBox anterior, al TextBox 'Nacimiento', en coincidencia exacta, la Fecha de Nacimiento que figura en la Tabla "PACIENTES", figurada en la columna 2 de ésta asociada al Paciente seleccionado en el ComboBox que refiero al principio.

En pseudocódigo sería algo así como: Me.Nacimiento = VLookup(Me.Paciente, Sheets("PACIENTES"), 2, 0)

Y digo pseudocódigo porque su sintaxis no es correcta: el editor VBA se queja subrayándome el enunciado de la función y diciéndome que "No se ha definido Sub o Function".

Otra cuestión sería la de determinar el evento más conveniente al que asociar el código... supongo que al de Después de Actualizar el ComboBox 'Paciente', ¿no?

Saludos al foro.
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 Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Uso de la función DLookup desde un UserForm.

Publicado por Antoni Masana (2540 intervenciones) el 07/05/2024 21:58:51
Esta función en VBA se escribe así:

1
Me.Nacimiento = WorksheetFunction.VLookup(Me.Paciente, Sheets("PACIENTES").Range("A:B"), 2, 0)

Saludos.
\\//_
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
sin imagen de perfil

Uso de la función DLookup desde un UserForm.

Publicado por Rafael (102 intervenciones) el 07/05/2024 23:39:08
Gracias, Antoni

La sintaxis que me pasas del VLookuo no me da error, pero me devuelve un número de cinco dígitos que nada tiene que ver con la fecha de nacimiento del 'Paciente'...

... ¿y lo del evento al que asociar la función? Lo tengo asociado de momento al evento AlEntrar... pero, idealmente, lo adecuado sería tras la selección del Ítem del Paciente correspondiente... ¿se puede?
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 Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Uso de la función DLookup desde un UserForm.

Publicado por Antoni Masana (2540 intervenciones) el 08/05/2024 00:25:25
Si que tiene que ver.
Es el formato en el que Excel guarda una fecha, es el número de días desde el 1 de enero de 1900 hasta hoy.

Falta un detalle:

1
Me.Nacimiento = Format(WorksheetFunction.VLookup(Me.Paciente, Sheets("PACIENTES").Range("A:B"), 2, 0), "dd/mm/yyyy")

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
sin imagen de perfil

Uso de la función DLookup desde un UserForm.

Publicado por Rafael (102 intervenciones) el 08/05/2024 06:20:57
Muchas gracias una vez más, Antoni
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
sin imagen de perfil

Uso de la función DLookup desde un UserForm.

Publicado por Rafael (102 intervenciones) el 09/05/2024 19:35:52
Siguiendo el patrón del llenado de un ComboBox del formulario del que hablo aquí, aunque con nulo éxito, he tratado de añadir a él los ítems de la hoja/tabla de "DIAGNOSTICOS" del mismo libro.

Pretendía que el combo -llamado "Diagbostico"- me presente las tres columnas de la tabla, aunque en él, tras la selección correspondiente, quedaría sólo el dato de la columna 2, es decir la B de esta tabla.

El código que he empleado, en el Initialize del formulario, ya digo que equivocadamente, ha sido el de:

1
2
3
4
5
6
7
8
9
10
11
 'LLENO EL COMBO DE DIAGNOSTICOS:
    Dim Fila2, Final2, I2 As Long
    Dim Lista2 As String
 
    Fila2 = Sheets("DIAGNOSTICOS").Range("B" & Rows.Count).End(xlUp).Row + 1
    Final2 = Fila2 - 1
 
    For I2 = 2 To Final2
        Lista2 = Sheets("DIAGNOSTICOS").Cells(I, 1)
        Me.Diagnostico.AddItem (Lista2)
    Next I2

Pongo en negrita lo que, cuando menos, creo que está equivocado: ... Range B... y ...Cells(I,1)
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 Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Uso de la función DLookup desde un UserForm.

Publicado por Antoni Masana (2540 intervenciones) el 10/05/2024 11:45:08
El segundo número del Cells corresponde a la columna:

1
2
3
1 - "A"
2 - "B"
etc

Es decir:

1
2
Cells(I, 1) = Cells(I, "A")
Cells(I, 2) = Cells(I, "B")

por lo que en el código hay que modificar:

1
2
3
4
5
6
7
8
9
10
11
12
 'LLENO EL COMBO DE DIAGNOSTICOS:
    Dim Fila2, Final2, I2 As Long
    Dim Lista2 As String
 
    Fila2 = Sheets("DIAGNOSTICOS").Range("B" & Rows.Count).End(xlUp).Row + 1
    Final2 = Fila2 - 1
 
    For I2 = 2 To Final2
        Lista2 = Sheets("DIAGNOSTICOS").Cells(I, 1)
        Lista2 = Sheets("DIAGNOSTICOS").Cells(I, 2)  ' --- o también .Cells(I, "B")
        Me.Diagnostico.AddItem (Lista2)
    Next I2

Saludos.
\\//_
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