Formulario y listbox no actualizan tabla

Tengo un formulario con un listbox, al seleccionar un item del listbox se llenan los campos del formulario, tengo un botón editar por si hago algún cambio en algún campo de texto del formulario poder editar y guardar el cambio en la tabla CLIENTES.

El problema es que cada vez que hago click en el botón editar toma los valores viejos del listbox y los sobreescribe de nuevo en los campos del formulario y por ende se guardan lo valores viejos otra vez en la tabla, por decirlo así nunca actualiza los valores nuevos que pongo en los textbox.

Agradezco su ayuda

No puedo pegar el código, me indica que muchas palabras sin espacio o algo así

2 respuestas

Respuesta

Hay que revisar la secuencia y cómo estás cargando los datos en el listbox.

Comparte tu archivo en google drive y pegas aquí el enlace, para revisar el código.

Respuesta

Te muestro un ejemplo muy sencillo con 2 controles ListBox: uno se alimenta con la propiedad RowSource y el otro recorriendo la hoja de datos. Por supuesto que todo el código es de ejemplo, mejorable. Es para que observes la diferencia al momento de editar un registro.

Private Sub UserForm_Initialize()
ListBox1.RowSource = "=Listas!TablaMediosP"
For i = 8 To 15
    ListBox2.AddItem Sheets("Listas").Range("D" & i)
Next i
End Sub

Luego, al clic en cada Listbox, se pasa el dato a los controles textbox y allí se modifican.

Private Sub ListBox1_Click()
TextBox1 = ListBox1.List(ListBox1.ListIndex)
End Sub
Private Sub ListBox2_Click()
TextBox2 = ListBox2.List(ListBox2.ListIndex)
End Sub

El botón de Editar envía a la hoja los campos modificados. Y en la siguiente imagen se observa el resultado en cada ListBox dependiendo de cómo han sido alimentados.

Seguramente tendrás uno u otro caso. Si utilizas la propiedad Rowsource no tendrás que hacer nada (*), en cambio si utilizas 'Additem' tendrás que limpiar la lista y volverla a cargar, desde el mismo botón Editar:

Private Sub CommandButton1_Click()      'botón EDITAR
'Ya tendrás el modo de identificar la fila correspondiente en la hoja
'luego del pase a la hoja.......
'opcional: limpiar los controls
TextBox1 = "": TextBox2 = ""
'volver a llenar el listBox2
ListBox2.Clear
For i = 8 To 15
    ListBox2.AddItem Sheets("Listas").Range("D" & i)
Next i
End Sub

Espero que el ejemplo te sirva para adaptarlo a tu caso. 

*Te invito a visitar la sección Manuales... acabo de publicar el Manual 500Macros+365 (revisión y actualización completa del manual 500Macros incluyendo código apto para la versión Excel 365 + nuevos capítulos. Imperdible!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas