Ayuda de comparación
Publicado por Jorge (39 intervenciones) el 14/09/2021 22:31:00
Buenas tardes, en mi sistema de expedientes se me presenta un problema y no hallo solucionarlo, así que requiero un poco de ayuda extra. El problema en el sistema ocurre cuando voy a modificar un registro en la hoja "otros" que es la que almacena la información de los otros involucrados en el informe, "otros" se relaciona con la hoja "data" mediante el ID (la única relación que existen entre ambas hojas es solo los datos ID, el ID en la hoja "data" es único y en la hoja "otros" puede repetirse).
Para poner de ejemplo, puedo seleccionar un registro existente que no tenga otros involucrados (solo uno que es el principal) pero resulta que por equis razón en el proceso de la investigación se determino que existen otros involucrados en el mismo caso, de tal manera que abro el registro 1 y agrego los demás involucrados (el sistema en excel realiza este proceso correctamente). Cuando llega el expediente, requiero actualizar la información con el resto de los datos para culminar el registro, es a donde viene el problema, cuando utilizo el botón modificar, en el proceso de guardado, si existe otros involucrados en el listbox1 (que es el cuadro de lista que contiene la información de los otros involucrados que se encuentra en la hoja "otros"), debería hacer una comparación entre el listbox1 y la hoja "otros" que si ya existe una cédula con el mismo ID, me salto esa fila del listbox1 y prosiga a la siguiente fila, y asi consecutivamente el bucle y me guarde la información del listbox1 que no se encuentre en la hoja "otros".
Se que es un poco confusa la explicación pero creo que explique un poco bien lo que trato de hacer, aquí dejo el código que fue la ultima prueba que ice la cual no tuve éxito, también unas fotos y el documento excel:
Para acceder al documento excel ya que estoy diseñando un sistema de acceso de usuario, estos son los datos:
usuario: diaz
contraseña: diaz23
Para poner de ejemplo, puedo seleccionar un registro existente que no tenga otros involucrados (solo uno que es el principal) pero resulta que por equis razón en el proceso de la investigación se determino que existen otros involucrados en el mismo caso, de tal manera que abro el registro 1 y agrego los demás involucrados (el sistema en excel realiza este proceso correctamente). Cuando llega el expediente, requiero actualizar la información con el resto de los datos para culminar el registro, es a donde viene el problema, cuando utilizo el botón modificar, en el proceso de guardado, si existe otros involucrados en el listbox1 (que es el cuadro de lista que contiene la información de los otros involucrados que se encuentra en la hoja "otros"), debería hacer una comparación entre el listbox1 y la hoja "otros" que si ya existe una cédula con el mismo ID, me salto esa fila del listbox1 y prosiga a la siguiente fila, y asi consecutivamente el bucle y me guarde la información del listbox1 que no se encuentre en la hoja "otros".
Se que es un poco confusa la explicación pero creo que explique un poco bien lo que trato de hacer, aquí dejo el código que fue la ultima prueba que ice la cual no tuve éxito, también unas fotos y el documento excel:
Para acceder al documento excel ya que estoy diseñando un sistema de acceso de usuario, estos son los datos:
usuario: diaz
contraseña: diaz23
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
'Evento para MODIFICAR los registros en la base de datos de acuerdo al ID del registro
'
Private Sub editar_Click(): On Error Resume Next
Dim fila, otros, e As Long, i_editar
Dim MENSAJE, VALORID, VALORCIV As String
'Impide hacer nuevos registros si se esta modificando
If solo_modifica <= 0 Then
MsgBox "Debe abrir un registro para poder modificarlo", vbCritical, "DATAPAD 3.3"
Exit Sub
End If
fila = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
otros = Hoja4.Range("A" & Rows.Count).End(xlUp).Row + 1
MENSAJE = MsgBox("¿Estás seguro de editar este registro?", vbQuestion + vbYesNo, "DATAPAD 3.3")
If MENSAJE = vbYes Then
For i_editar = 2 To fila - 1
If Val(ID) = Val(Hoja1.Cells(i_editar, 1)) Then
Hoja1.Cells(i_editar, 1) = Val(ID)
Hoja1.Cells(i_editar, 2) = Val(cedula)
Hoja1.Cells(i_editar, 3) = siglas
Hoja1.Cells(i_editar, 4) = involucrado
Hoja1.Cells(i_editar, 5) = unidad
Hoja1.Cells(i_editar, 6) = graduacion
Hoja1.Cells(i_editar, 7) = instituto
Hoja1.Cells(i_editar, 8) = promocion
With ListBox1
If .ListIndex < 0 Then
For e = 0 To .ListCount - 1
otros = otros + 1
VALORID = InStr(e, ID, Hoja4.Cells(otros, 1), vbTextCompare)
VALORCIV = InStr(e, .List(e, 1), Hoja4.Cells(otros, 2), vbTextCompare)
MsgBox VALORID & ", " & VALORCIV & " - " & .List(e, 1)
Next e
End If
End With
Exit Sub
Hoja1.Cells(i_editar, 9) = cargo_laboral
Hoja1.Cells(i_editar, 10) = fecha_registro
Hoja1.Cells(i_editar, 11) = emision_rin
Hoja1.Cells(i_editar, 12) = nro_rin
Hoja1.Cells(i_editar, 13) = fecha_hecho
Hoja1.Cells(i_editar, 14) = causa
Hoja1.Cells(i_editar, 15) = descripcion_causa
Hoja1.Cells(i_editar, 16) = fiscalia
Hoja1.Cells(i_editar, 17) = detencion
Hoja1.Cells(i_editar, 18) = orden
Hoja1.Cells(i_editar, 19) = nomenclatura
Hoja1.Cells(i_editar, 20) = nro_orden
Hoja1.Cells(i_editar, 21) = nro_oficio
Hoja1.Cells(i_editar, 22) = sustanciador
Hoja1.Cells(i_editar, 23) = cargo_sustanciador
Hoja1.Cells(i_editar, 24) = apertura
Hoja1.Cells(i_editar, 25) = vencimiento
If estado = "ENTREGADO" Then
Hoja1.Cells(i_editar, 26) = lapsos
Else
Hoja1.Cells(i_editar, 26).FormulaR1C1 = "=DAYS360(TODAY(),RC[-1])"
End If
'+++++++++
If estado = "ENTREGADO" Then
Hoja1.Cells(i_editar, 27) = estado
Else
Hoja1.Cells(i_editar, 27).FormulaR1C1 = "=IF(RC[-1]<=0,""VENCIDO"",IF(RC[-1]<=70,""ALERTA"",""PENDIENTE""))"
End If
'+++++++++
Hoja1.Cells(i_editar, 28) = fecha_recepcion
Hoja1.Cells(i_editar, 29) = nro_recepcion
Hoja1.Cells(i_editar, 30) = recibe
Hoja1.Cells(i_editar, 31) = revisa
Hoja1.Cells(i_editar, 32) = estatus_expediente
Hoja1.Cells(i_editar, 33) = nro_acta
Hoja1.Cells(i_editar, 34) = destino
Hoja1.Cells(i_editar, 35) = decision
'Foto de Perfil
If Hoja1.Cells(i_editar, 36) = "" Then
Hoja1.Cells(i_editar, 36) = foto_perfil 'es una variable publica
End If
'Foto del RIN
If Hoja1.Cells(i_editar, 37) = "" Then
Hoja1.Cells(i_editar, 37) = foto_rin 'es una variable publica
End If
'Foto de la Orden de Incio
If Hoja1.Cells(i_editar, 38) = "" Then
Hoja1.Cells(i_editar, 38) = foto_orden 'es una variable publica
End If
'Fotol archivo
If Hoja1.Cells(i_editar, 39) = "" Then
Hoja1.Cells(i_editar, 39) = foto_archivo 'es una variable publica
End If
End If
Next i_editar
MsgBox "REGISTRO EXITOSO", vbExclamation, "DATAPAD 3.3"
'Refresca el libro Excel antes de GUARDAR
'ActiveWorkbook.Save
reload
Else
MsgBox "OPERACIÓN CANCELADA", vbExclamation, "DATAPAD 3.3"
End If
End Sub
- Datapad3.3.rar(3,7 MB)
Valora esta pregunta
0