Modificar registros mediante listbox.VBA EXCEL

Tengo un listbox que muestra 4 columnas de datos. Estoy intentando buscar algún tipo de información sobre como puedo editar los registros en el listbox y que se pasen a la hoja.

Estoy probando diferentes formas que veo por internet pero no me da resultado como esto:

For j = 1 To 6
ActiveCell.Offset(0, j).Value = Me.Controls("Textbox" & j).Value
Next j

A continución adjunto el codigo mediante el cual se carga el listbox:

j = 1
Set hojabase = ThisWorkbook.Sheets("Equipaments")
filas = Range("taula_equipaments").CurrentRegion.Rows.Count
For i = 2 To filas
If LCase(hojabase.Cells(i, j).Offset(1, 0).Value) Like "*" Then
Me.list_equipaments2.AddItem hojabase.Cells(i, j)
Me.list_equipaments2.List(Me.list_equipaments2.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
Me.list_equipaments2.List(Me.list_equipaments2.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
Me.list_equipaments2.List(Me.list_equipaments2.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
Me.list_equipaments2.List(Me.list_equipaments2.ListCount - 1, 4) = hojabase.Cells(i, j).Offset(0, 4)
Else
End If
Next i

Los datos a modificar se introducen en textbox y combobox.
¿Cómo lo podría hacer?

2 Respuestas

Respuesta
1

Supongo que quieres modificar los registros de la hoja "Equipaments", pero solamente si coinciden con lo que tienes en el textbox y combobox. Si es así podrías explicar cuál columna de la hoja se debe comparar contra el textbox y cuál columna contra el combo.

Si no es así, entonces podrías explicar con un ejemplo lo que necesitas.

Si, tengo un listbox que aparecen todos los datos de la hoja "equipaments" . Al hacer click sobre el listbox se me cargan los datos seleccionados en unos textbox y combobox, es ahí donde si hago una modificación y pulso aceptar debería modificar los resultados.
La columna A se compara con un text llamado numero

La columna B se compara con combobox llamado tipología

La columna C se compara con un textbox llamado nombre

La columna DE se compara con un combobox llamado localidad.
El botón para realizar los cambios se llama aceptar

Actualiza tu botón para cargar el listbox con lo siguiente:

Private Sub CommandButton1_Click()
'BONTON PARA CARGAR EL LISTBOX
  Dim j As Long, i As Long, filas As Long
  Dim hojabase As Worksheet
  j = 1
  Set hojabase = ThisWorkbook.Sheets("Equipaments")
  filas = Range("taula_equipaments").CurrentRegion.Rows.Count
  For i = 2 To filas
    If LCase(hojabase.Cells(i, j).Offset(1, 0).Value) Like "*" Then
      With Me.list_equipaments2
        . AddItem hojabase.Cells(i, j)
        . List(.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
        . List(.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
        . List(.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
        . List(.ListCount - 1, 4) = hojabase.Cells(i, j).Offset(0, 4)
        .List(.ListCount - 1, 5) = i  'guarda el número de fila
      End With
    End If
  Next i
End Sub

Pon lo siguiente en tu botón Aceptar:

Private Sub CommandButton2_Click()
'BOTON ACEPTAR PARA PASAR LOS DATOS A LA HOJA
  Dim fila As Long
  Dim hojabase As Worksheet
  Set hojabase = ThisWorkbook.Sheets("Equipaments")
'VALIDADIONES
  If list_equipaments2.ListIndex = -1 Then
    MsgBox "Selecciona un registro del listbox"
    Exit Sub
  End If
  If numero.Value = "" Then
    MsgBox "Captura un numero"
    numero.SetFocus
    Exit Sub
  End If
  If tipologia.Value = "" Then
    MsgBox "Captura una tipologia"
    tipologia.SetFocus
    Exit Sub
  End If
  '
  'pon aquí las validaciones que sean necesarias
  '
  fila = list_equipaments2.List(list_equipaments2.ListIndex, 5) 'toma el número de fila
  hojabase.Range("A" & fila).Value = numero.Value
  hojabase.Range("B" & fila).Value = tipologia.Value
  hojabase.Range("C" & fila).Value = nombre.Value
  hojabase.Range("D" & fila).Value = localidad.Value
End Sub

Hola de nuevo Dante. El primero código que me has pasado lo he puesto en el evento initialize del form para que se cargue al abrir.
El segundo código que me has pasado lo he puesto tal y como me has dicho, en el botón de aceptar los cambios, pero el código no me funciona.

Uso no valido Null error 94
Me da error en esta línea

fila = list_equipaments2.List(list_equipaments2.ListIndex, 5) 'toma el número de fila

El form me carga correctamente, el problema lo tengo a la hora de aceptar los cambios y traspasarlos a la hoja de calculo

Lo que sucede es que no está cargando el número de fila.

En el código que carga el listbox debe estar esta línea:

.List(.ListCount - 1, 5) = i 

Revisa que hayas puesto la línea. Revisa nuevamente mi código.

Gracias Dante, el problema es que tenia limitado el numero de columnas del listbox a 4.
Al introducir una nueva columna olvide aumentar las columnas del listbox

Me alegra saber que ya funciona para ti. G r a c i a s  por comentar.

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas