Valores de un listbox relacionado con otro listbox
Publicado por Jorge (39 intervenciones) el 12/08/2021 06:36:02
Hola amigos programadores, espero me ayuden con este problema que tengo... He estado diseñando una aplicación en Excel referente a registros de expedientes y he estado utilizando todos los conocimientos que he ido adquiriendo en este trabajo. Mi siguiente consulta es la siguiente y tratare de ser lo más breve, para ello prepare una especie de mapa mental de acuerdo a la funcionalidad de la aplicación y lo que deseo que haga la aplicación:
Tal como trato de explicar en la imagen, tengo una hoja llamada "data" que es donde se almacena la información que ingreso en el formulario, debido a que es una base de datos referente a expedientes, pueden haber mas involucrados, de tal manera que cada registro en "data" cuenta con un "ID" único y para relacionar el involucrado principal con los involucrados secundarios tengo en mi formulario "ListBox1" que cumple la función de cargar y mostrarme los demás involucrados, dicha información se almacena en otra hoja por nombre "otros" que cuentan con el "ID" de mi registro principal en mi hoja "data".
Cuando hago una consulta de una cédula, "ListBox2" me muestra todos los informes que se le han aperturado a esa persona, sin embargo, si en algún informe hay otros involucrados, "ListBox1" me va a tener que mostrar la información de esas otras personas indicando en el indice el "ID" del registro a la cual esta vinculado.
Pido disculpas por el alargue, ahora la consulta: El problema esta en "ListBox1" que debe mostrarme simplemente los registros vinculados a los informes que se presentan en "ListBox2" que corresponden a la cédula.
He intentado hacerlo de mil maneras pero no obtengo el resultado deseado, en este caso utilice este código que fue el mas cercano al resultado que esperaba, sin embargo "ListBox1" me sigue arrojando registros de la hoja "otros" que no están relacionados al informe o los informes que corresponden al involucrado principal.
Tal como trato de explicar en la imagen, tengo una hoja llamada "data" que es donde se almacena la información que ingreso en el formulario, debido a que es una base de datos referente a expedientes, pueden haber mas involucrados, de tal manera que cada registro en "data" cuenta con un "ID" único y para relacionar el involucrado principal con los involucrados secundarios tengo en mi formulario "ListBox1" que cumple la función de cargar y mostrarme los demás involucrados, dicha información se almacena en otra hoja por nombre "otros" que cuentan con el "ID" de mi registro principal en mi hoja "data".
Cuando hago una consulta de una cédula, "ListBox2" me muestra todos los informes que se le han aperturado a esa persona, sin embargo, si en algún informe hay otros involucrados, "ListBox1" me va a tener que mostrar la información de esas otras personas indicando en el indice el "ID" del registro a la cual esta vinculado.
Pido disculpas por el alargue, ahora la consulta: El problema esta en "ListBox1" que debe mostrarme simplemente los registros vinculados a los informes que se presentan en "ListBox2" que corresponden a la cédula.
He intentado hacerlo de mil maneras pero no obtengo el resultado deseado, en este caso utilice este código que fue el mas cercano al resultado que esperaba, sin embargo "ListBox1" me sigue arrojando registros de la hoja "otros" que no están relacionados al informe o los informes que corresponden al involucrado principal.
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
'Código para buscar y captar los datos del involucrado al presionar la tecla "INTRO" de acuerdo a la cédula
'
Private Sub cedula_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): On Error Resume Next
Dim Fila As Long, DATAPAD As Long, otros As Long, i As Long
DATAPAD = Hoja1.Range("A" & Rows.Count).End(xlUp).Row 'hoja "data"
Fila = Hoja3.Range("A" & Rows.Count).End(xlUp).Row 'hoja "personal"
otros = Hoja4.Range("A" & Rows.Count).End(xlUp).Row 'hoja "otros"
ListBox1.Clear
ListBox2.Clear
If KeyCode = 13 Then
'Función BUSCARV al VLookup:
With WorksheetFunction
siglas = .VLookup(Val(cedula), Hoja3.Range("A2:E" & Fila), 2, 0)
involucrado = .VLookup(Val(cedula), Hoja3.Range("A2:E" & Fila), 3, 0)
unidad = .VLookup(Val(cedula), Hoja3.Range("A2:E" & Fila), 4, 0)
estatus = .VLookup(Val(cedula), Hoja3.Range("A2:H" & Fila), 5, 0)
'Busca alguna coincidencia en DATAPAD que facilite el autollenado de datos
graduacion = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 5, 0)
instituto = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 6, 0)
promocion = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 7, 0)
foto.Picture = LoadPicture(.VLookup(Val(cedula), Hoja1.Range("B2:AI" & DATAPAD), 34, 0))
End With
'Aqui añadimos los datos al listbox2
For i = 2 To DATAPAD + 1
If UCase(Hoja1.Cells(i, 2)) Like "*" & UCase(cedula) & "*" Then
With ListBox2
.AddItem
.List(.ListCount - 1, 0) = Hoja1.Cells(i, 1) 'ID
.List(.ListCount - 1, 1) = Hoja1.Cells(i, 18) 'Tipo de Informe
If Hoja1.Cells(i, 21) = "" Then
.List(.ListCount - 1, 2) = Hoja1.Cells(i, 19) & " " & Hoja1.Cells(i, 20) 'Número de Informe
Else
.List(.ListCount - 1, 2) = Hoja1.Cells(i, 21) 'Nro. Oficio (Breve o Nota Informativa)
End If
.List(.ListCount - 1, 3) = Hoja1.Cells(i, 24) 'Fecha de emision
.List(.ListCount - 1, 4) = Hoja1.Cells(i, 14) 'Causa
.List(.ListCount - 1, 5) = Hoja1.Cells(i, 34) 'Decision
End With
'Aqui añadimos los datos relacionados de los registros al listbox1
'la cual me esta arrojando registros que no se relacionan a los informes del involucrado principal
'
With ListBox1
.AddItem
.List(.ListCount - 1, 0) = Hoja4.Cells(i, 1) 'ID
.List(.ListCount - 1, 1) = Hoja4.Cells(i, 2) 'CEDULA
.List(.ListCount - 1, 2) = Hoja4.Cells(i, 3) 'SIGLAS
.List(.ListCount - 1, 3) = Hoja4.Cells(i, 4) 'NOMBRE
End With
End If
Next i
End If
End Sub
Valora esta pregunta
0