Modificar datos de un formulario desde otro form

Tengo un formulario donde tengo por un listbox que carga datos de una hoja Excel.

Por ejemplo, el formulario es sobre vehículos y el listbox muestra los conductores que han conducido o conducen ese vehículo. Cuando hago doble click en un item del listbox se abre otro form donde se cargan los datos seleccionados. Lo que intento es modificar los datos de listbox a través de este segundo formulario. No sé si la idea que he tomado es buena o la hay mejor, porque lo que hago es llevarme los datos del item seleccionado a otra hoja Excel para luego verlos en el segundo formulario, entonces editarlos y luego esos datos los busco en la hoja de donde caro el listbox y los modifico. Lo que pasa es que cuando cierro el segundo formulario el primero no se actualiza porque no sé cómo hacerlo. Si cierro el formulario y lo vuelvo a abrir sí que se actualiza porque vuelve a cargar el listbox.

Bueno, voy a mostrar imágenes a ver si así logro ayudar con esta explicación.

Aquí el formulario de Vehículos:

Los datos del listbox los cargo de una hoja Excel a través del siguiente código:

Sheets("MATR_DISP").Select
filas = Sheets("MATR_DISP").Range("N65536").End(xlUp).Row
ListHistorico.Visible = True
ListHistorico.Clear
i = 0
For c = 3 To filas
ListHistorico.AddItem
HENTREGA = Format(CDate(Sheets("MATR_DISP").Cells(c, 18)), "hh:mm")
HDEVOLUCION = Format(CDate(Sheets("MATR_DISP").Cells(c, 20)), "hh:mm")
ListHistorico.List(i, 0) = Sheets("MATR_DISP").Cells(c, 15)
ListHistorico.List(i, 1) = Sheets("MATR_DISP").Cells(c, 16)
ListHistorico.List(i, 2) = Sheets("MATR_DISP").Cells(c, 17)
ListHistorico.List(i, 3) = HENTREGA
ListHistorico.List(i, 4) = Sheets("MATR_DISP").Cells(c, 19)
If HDEVOLUCION = "00:00" Then
Else
ListHistorico.List(i, 5) = HDEVOLUCION
End If
ListHistorico.List(i, 6) = Sheets("MATR_DISP").Cells(c, 21)
i = i + 1
Next

continuo.........................

Respuesta
1

Cuando hago doble click en uno de los item a través de este otro código me llevo los datos a una hoja Excel. No sé si eso es buena idea o si no es necesario:

matricula_selec = form_buscarMATRICULA.BuscMatricula.Value
Sheets("Conductores").Range("J3:Q3").ClearContents
'asignamos los datos seleccionados a variables
nombre_selec = ListHistorico.List(ListHistorico.ListIndex, 0)
empresa_selec = ListHistorico.List(ListHistorico.ListIndex, 1)
fentrega_selec = ListHistorico.List(ListHistorico.ListIndex, 2)
hentrega_selec = ListHistorico.List(ListHistorico.ListIndex, 3)
fdevolucion_selec = ListHistorico.List(ListHistorico.ListIndex, 4)
hdevolucion_selec = ListHistorico.List(ListHistorico.ListIndex, 5)
tip_selec = ListHistorico.List(ListHistorico.ListIndex, 6)
'lo enviamos a la hoja Conductores a partir de la columna J
Sheets("Conductores").Range("J3") = matricula_selec
Sheets("Conductores").Range("K3") = nombre_selec
Sheets("Conductores").Range("L3") = empresa_selec
Sheets("Conductores").Range("M3") = CDate(fentrega_selec)
Sheets("Conductores").Range("N3") = hentrega_selec
Sheets("Conductores").Range("O3") = CDate(fdevolucion_selec)
Sheets("Conductores").Range("P3") = hdevolucion_selec
Sheets("Conductores").Range("Q3") = tip_selec

Y seguidamente llamo a otro formulario

subform_ModificarCond.Show

Este es el formulario.

Y relleno los datos en su mayor parte de los item del listbox de antes y además con algunos datos que no estaban incluidos. También como algunos textbox quiero que busque entre varias opciones los rellena de otras hojas del libro. Un código un poco lioso.

ListaConductorMod.SetFocus
TextMatriculaMod = Sheets("Conductores").Range("J3")
ListaConductorMod = Sheets("Conductores").Range("K3")
ListaEmpresaMod = Sheets("Conductores").Range("L3")
ListaTipoMod = Sheets("Conductores").Range("Q3")
TextFEntregaMod = CDate(Sheets("Conductores").Range("M3"))
TextHEntregaMod = Format(CDate(Sheets("Conductores").Range("N3")), "hh:mm")
  If Sheets("Conductores").Range("O3") = "" Then
  TextFDevolucionMod = ""
  Else
  TextFDevolucionMod = CDate(Sheets("Conductores").Range("O3"))
  End If
  If Sheets("Conductores").Range("P3") = "" Then
  TextHDevolucionMod = ""
  Else
  TextHDevolucionMod = Format(CDate(Sheets("Conductores").Range("P3")), "hh:mm")
  End If
'rellenamos las listas de los desplegables
'Conductores
Sheets("COND_DISP").Select
ultimafila = Columns("A:A").Range("A65536").End(xlUp).Row
For cont = 2 To ultimafila
If Cells(cont, 1) <> "" Then
ListaConductorMod.AddItem (Cells(cont, 1))
End If
Next
'Empresas
Sheets("Configuracion").Select
ultimafila = Columns("A:A").Range("A65536").End(xlUp).Row
For cont = 2 To ultimafila
If Cells(cont, 1) <> "" Then
ListaEmpresaMod.AddItem (Cells(cont, 1))
End If
Next
'Tipos de empresas
Sheets("Configuracion").Select
ultimafila = Sheets("Configuracion").Range("C65536").End(xlUp).Row
For cont = 2 To ultimafila
If Range("C" & cont) <> "" Then
ListaTipoMod.AddItem (Range("C" & cont))
End If
Next

Cuando lo tengo todo relleno y estoy de acuerdo le doy al botón Validar. Aquí me llevo los datos a una hoja Excel donde están los Conductores y después copio los datos en el mismo lugar donde estaban los originales para así actualizando con las modificaciones. Por ejemplo puede ser que cambie el nombre del conductor o cualquier fecha.

Sheets("Conductores").Select
Range("J4") = TextMatriculaMod
Range("K4") = ListaConductorMod
Range("L4") = ListaEmpresaMod
Range("Q4") = ListaTipoMod
Range("M4") = CDate(TextFEntregaMod)
Range("N4") = (TextHEntregaMod)
Range("O4") = CDate(TextFDevolucionMod)
Range("P4") = (TextHDevolucionMod)
Range("Q4") = ListaTipoMod
'buscar la linea en la tabla Conductores y modificar todos los datos
For h = 2 To Sheets("Conductores").Range("C65536").End(xlUp).Row
matriculah = Range("A" & h)
conductorh = Range("B" & h)
fentregah = Range("D" & h)
If matriculah = Range("J3") And conductorh = Range("K3") And CDate(fentregah) = Range("M3") Then
Range("B" & h) = ListaConductorMod
Range("C" & h) = ListaEmpresaMod
Range("D" & h) = CDate(TextFEntregaMod)
Range("E" & h) = CDate(TextHEntregaMod)
Range("F" & h) = CDate(TextFDevolucionMod)
Range("G" & h) = CDate(TextHDevolucionMod)
Range("H" & h) = ListaTipoMod
Else
End If
Next

Si cierro este formulario tengo abierto el formulario principal pero no actualiza el listbox. Si cierro el formulario como vuelve a cargar los datos entonces si que se abre con los datos modificados.

Lo que quiero es que no sea necesario cerrar el formulario para actualizar.

Y luego, creo que para modificar los datos principales le estoy dando muchas vueltas con copiar a una hoja y luego llevármelos a la tabla principal, creo que me estoy liando.

Si me echáis una mano os lo agradezco.

PD: Perdonar por enviarlo en varias partes, no he encontrado la manera de hacerlo sino es así.

Moisés.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas