Cargar datos en una tabla de datos de excel con vba

Mi código me da un fallo al rato de estar usando la aplicación,

El problema es que cuando cargo el formulario a la hoja la tabla no siempre se amplia a las mismas filas que tiene la hoja y cuando tengo que usar los datos de la tabla en otro formulario no me aparecen.

Espero que puedan ayudarme.

Private Sub btn_guardar_Click()
Dim final As Integer
  final = Hoja7.Range("A" & Rows.Count).End(xlUp).Row + 1
        For i = 0 To Me.ListBox1.ListCount - 1
        Hoja7.Cells(final, 1) = Me. ListBox1.List(i, 0)
        Hoja7.Cells(final, 2) = Me. ListBox1.List(i, 1)
        Hoja7.Cells(final, 3) = Me. ListBox1.List(i, 2)
        Hoja7.Cells(final, 4) = Me. ListBox1.List(i, 3)
        Hoja7.Cells(final, 5) = Me. ListBox1.List(i, 4)
        Hoja7.Cells(final, 6) = Me. ListBox1.List(i, 5)
        final = final + 1
    Next
    ListBox1.Clear
    i = 0
    Me.cbo_equipo.SetFocus
End Sub
Respuesta
1

Que intentas pasar datos de un listbox a la hoja de excel, esto te puede guiar

https://macrosenexcel.com/pasar-datos-listbox-hoja-de-exce

https://macrosenexcel.com/pasar-datos-de-listbox-con-doble-click 

https://youtu.be/EAQXNdpk1jQ

https://youtu.be/by3_TrrAE3Q 

Aca tienes más sobre listbox si deseas sabeer mas o encuentras un ejemplo que se adapte mas a lo que tu tienes

1 respuesta más de otro experto

Respuesta
3

Mi código me da un fallo al rato de estar usando la aplicación,

¿Qué mensaje de error te aparece?

¿Y en cuál fila del código se detiene?

Es que no me genera ningún mensaje, solo que la tabla no aumenta tal y como se muestra en la foto.

Primero, debes ampliar la tabla hasta el último registro con datos.

Segundo, en Opciones de excel, Revisión, Opciones de autocorrección, Autoformato mientras escribe, debe estar activa la casilla : Incluir nuevas filas y columnas en la tabla.


Si lo anterior no funciona, entonces antes de poner el registro, debes incluir en la macro, el código para aumentar la tabla en un registro, en el registro nuevo de la tabla agregas los datos.

Así esta puesto en las opciones del excel.

¿Puedes decirme como es el código?

Gracias

¿Cómo se llama la tabla?

Tabla4

Prueba así:

Private Sub btn_guardar_Click()
  Dim final As Long, lobj As ListObject, i As Long, j As Long
  Set lobj = Hoja7.ListObjects("Tabla4")
  With ListBox1
    For i = 0 To .ListCount - 1
      lobj.ListRows.Add , 1
      final = lobj.ListRows.Count
      For j = 0 To 5
        lobj.DataBodyRange(final, j + 1) = .List(i, j)
      Next
    Next
    .Clear
  End With
  cbo_equipo.SetFocus
End Sub

¡Gracias!

Un genio, gracias mil, la verdad funciona perfecto, incluso me hace que vaya más rápido el código

Excelente, se queda corto¡

Me agrada ayudarte ¡G racias! Por comentar.

Buenas dante

Hace un poco me solucionaste el problema de que la tabla no me crecía al inserta filas.

Ahora cambie el listbox1 por un listview y vuelve a ocurrirme, e intentado modificar la tabla pero no consigo dar con el objeto correcto.

Te adjunto el código del listview y el código que me diste.

sl2

Private Sub btn_guardar_Click()
Dim j As Integer
Dim i As Integer
Dim Rango As Range
Dim NuevaFila As Integer
If Me.ListView1.ListItems.Count = 0 Then MsgBox "No hay registros": Exit Sub
 j = Hoja7.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
       For i = 1 To ListView1.ListItems.Count
            If ListView1.ListItems(i).Checked Then
                Hoja7.Cells(j, 1) = ListView1.ListItems(i).Text
                Hoja7.Cells(j, 2) = ListView1.ListItems(i).ListSubItems(1).Text
                Hoja7.Cells(j, 3) = ListView1.ListItems(i).ListSubItems(2).Text
                Hoja7.Cells(j, 4) = ListView1.ListItems(i).ListSubItems(3).Text
                Hoja7.Cells(j, 5) = ListView1.ListItems(i).ListSubItems(4).Text
                Hoja7.Cells(j, 6) = ListView1.ListItems(i).ListSubItems(5).Text
                Hoja7.Cells(j, 7) = ListView1.ListItems(i).ListSubItems(5).Text
                j = j + 1
            End If
       Next i
MsgBox "Registros dados de alta correctamente.", vbInformation, "EXCELeINFO"
Unload Me
'  Dim final As Long, lobj As ListObject, i As Long, j As Long
'  Set lobj = Hoja7.ListObjects("Tabla4")
'  With ListView1
'    For i = 0 To .ListCount - 1
'      lobj.ListRows.Add , 1
'      final = lobj.ListRows.Count
'      For j = 0 To 5
'        lobj.DataBodyRange(final, j + 1) = .List(i, j)
'      Next
'    Next
'    .Clear
'  End With
' Unload Me
' frm_parte.Show
End Sub

No entiendo.

¿Por qué razón cambiaste a listview?

En el nuevo código no veo la tabla ni el listbox, entonces este es un nuevo tema, puedes crear una nueva pregunta y ahí explica qué necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas