Modificar datos de una tabla con un ListBox en Excel
Este tema ya lo venía pensando a raíz de varias consultas en el Blog, y bueno, me di a la tarea de preparar un ejemplo sencillo, pero que puede servir de base para proyectos más ambiciosos.
El ejemplo tiene una tabla la cual se mostrará en un ListBox que está en un formulario. Para efecto de modificar los datos de cada registro, basta con elegir uno de ellos y presionar el botón Modificar y lanzará otro formulario donde se podrán actualizar los datos.
Al igual también cuenta con un botón de Eliminar para eliminar la fila donde está el registro,
Imagen del formulario
Código del formulario para mostrar datos
'Cerrar formulario Private Sub CommandButton2_Click() Unload Me End Sub ' 'Abrir el formulario para modificar Private Sub CommandButton3_Click() If Me.ListBox1.ListIndex < 0 Then MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO" Else Modificar.Show End If End Sub ' 'Eliminar el registro Private Sub CommandButton4_Click() Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO") If Pregunta <> vbNo Then Fila = Me.ListBox1.ListIndex + 2 Rows(Fila).Delete Application.ScreenUpdating = True End If End Sub ' 'Activar la celda del registro elegido Private Sub ListBox1_Click() Fila = Me.ListBox1.ListIndex + 2 For i = 1 To 4 Cells(Fila, 1).Activate Next i End Sub 'Dar formato al ListBox y traer datos de la tabla Private Sub UserForm_Initialize() With ListBox1 .ColumnCount = 4 .ColumnWidths = "60 pt;60 pt;70 pt" .ColumnHeads = True End With ListBox1.RowSource = "Tabla1" End Sub
Código del formulario para modificar
'Actualizar el registro Private Sub CommandButton1_Click() For i = 1 To 4 ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value Next i Unload Me End Sub ' 'Cerrar formulario Private Sub CommandButton2_Click() Unload Me End Sub ' 'Llenar los cuadro de texto con los datos del registro elegido Private Sub UserForm_Initialize() For i = 1 To 4 Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value Next i End Sub