Pasar datos de listbox a diferentes columnas

Nuevamente por aquí, molestando... Trato de pasar los 20 datos de mis listbox a excel pero no encuentro la fórmula para agregar los datos a diferente columnas. Me explico, guardar todos los datos de las líneas de 0, 2, 3 y 4 del listbox al final de las siguientes columnas. Y si no has más datos en el listbox lo deje en blanco, ya que no necesariamente ingrese los 20 datos.

 Listbox, linea 0 listbox, linea 2 listbox, linea 3 listbox, linea 4
Hoja6.Cells(Final, 4) = Me.Txt_CdgoBarra1     Hoja6.Cells(Final, 5) = Me.Txt_Venta1         Hoja6.Cells(Final, 6) = Me.Txt_Cantidad1     Hoja6.Cells(Final, 7) = Me.Txt_TotalNetoUnd1
Hoja6.Cells(Final, 8) = Me.Txt_CdgoBarra2     Hoja6.Cells(Final, 9) = Me.Txt_Venta2         Hoja6.Cells(Final, 10) = Me.Txt_Cantidad2     Hoja6.Cells(Final, 11) = Me.Txt_TotalNetoUnd2
Hoja6.Cells(Final, 12) = Me.Txt_CdgoBarra3     Hoja6.Cells(Final, 13) = Me.Txt_Venta3         Hoja6.Cells(Final, 14) = Me.Txt_Cantidad3     Hoja6.Cells(Final, 15) = Me.Txt_TotalNetoUnd3
Hoja6.Cells(Final, 16) = Me.Txt_CdgoBarra4     Hoja6.Cells(Final, 17) = Me.Txt_Venta4         Hoja6.Cells(Final, 18) = Me.Txt_Cantidad4     Hoja6.Cells(Final, 19) = Me.Txt_TotalNetoUnd4
Hoja6.Cells(Final, 20) = Me.Txt_CdgoBarra5     Hoja6.Cells(Final, 21) = Me.Txt_Venta5         Hoja6.Cells(Final, 22) = Me.Txt_Cantidad5     Hoja6.Cells(Final, 23) = Me.Txt_TotalNetoUnd5
Hoja6.Cells(Final, 24) = Me.Txt_CdgoBarra6     Hoja6.Cells(Final, 25) = Me.Txt_Venta6         Hoja6.Cells(Final, 26) = Me.Txt_Cantidad6     Hoja6.Cells(Final, 27) = Me.Txt_TotalNetoUnd6
Hoja6.Cells(Final, 28) = Me.Txt_CdgoBarra7     Hoja6.Cells(Final, 29) = Me.Txt_Venta7         Hoja6.Cells(Final, 30) = Me.Txt_Cantidad7     Hoja6.Cells(Final, 31) = Me.Txt_TotalNetoUnd7
Hoja6.Cells(Final, 32) = Me.Txt_CdgoBarra8     Hoja6.Cells(Final, 33) = Me.Txt_Venta8         Hoja6.Cells(Final, 34) = Me.Txt_Cantidad8     Hoja6.Cells(Final, 35) = Me.Txt_TotalNetoUnd8
Hoja6.Cells(Final, 36) = Me.Txt_CdgoBarra9     Hoja6.Cells(Final, 37) = Me.Txt_Venta9         Hoja6.Cells(Final, 38) = Me.Txt_Cantidad9     Hoja6.Cells(Final, 39) = Me.Txt_TotalNetoUnd9
Hoja6.Cells(Final, 40) = Me.Txt_CdgoBarra10     Hoja6.Cells(Final, 41) = Me.Txt_Venta10    Hoja6.Cells(Final, 42) = Me.Txt_Cantidad10     Hoja6.Cells(Final, 43) = Me.Txt_TotalNetoUnd10
Hoja6.Cells(Final, 44) = Me.Txt_CdgoBarra11     Hoja6.Cells(Final, 45) = Me.Txt_Venta11    Hoja6.Cells(Final, 46) = Me.Txt_Cantidad11     Hoja6.Cells(Final, 47) = Me.Txt_TotalNetoUnd11
Hoja6.Cells(Final, 48) = Me.Txt_CdgoBarra12     Hoja6.Cells(Final, 49) = Me.Txt_Venta12    Hoja6.Cells(Final, 50) = Me.Txt_Cantidad12     Hoja6.Cells(Final, 51) = Me.Txt_TotalNetoUnd12
Hoja6.Cells(Final, 52) = Me.Txt_CdgoBarra13     Hoja6.Cells(Final, 53) = Me.Txt_Venta13    Hoja6.Cells(Final, 54) = Me.Txt_Cantidad13     Hoja6.Cells(Final, 55) = Me.Txt_TotalNetoUnd13
Hoja6.Cells(Final, 56) = Me.Txt_CdgoBarra14     Hoja6.Cells(Final, 57) = Me.Txt_Venta14    Hoja6.Cells(Final, 58) = Me.Txt_Cantidad14     Hoja6.Cells(Final, 59) = Me.Txt_TotalNetoUnd14
Hoja6.Cells(Final, 60) = Me.Txt_CdgoBarra15     Hoja6.Cells(Final, 61) = Me.Txt_Venta15    Hoja6.Cells(Final, 62) = Me.Txt_Cantidad15     Hoja6.Cells(Final, 63) = Me.Txt_TotalNetoUnd15
Hoja6.Cells(Final, 64) = Me.Txt_CdgoBarra16     Hoja6.Cells(Final, 65) = Me.Txt_Venta16    Hoja6.Cells(Final, 66) = Me.Txt_Cantidad16     Hoja6.Cells(Final, 67) = Me.Txt_TotalNetoUnd16
Hoja6.Cells(Final, 68) = Me.Txt_CdgoBarra17     Hoja6.Cells(Final, 69) = Me.Txt_Venta17    Hoja6.Cells(Final, 70) = Me.Txt_Cantidad17     Hoja6.Cells(Final, 71) = Me.Txt_TotalNetoUnd17
Hoja6.Cells(Final, 72) = Me.Txt_CdgoBarra18     Hoja6.Cells(Final, 73) = Me.Txt_Venta18    Hoja6.Cells(Final, 74) = Me.Txt_Cantidad18     Hoja6.Cells(Final, 75) = Me.Txt_TotalNetoUnd18
Hoja6.Cells(Final, 76) = Me.Txt_CdgoBarra19     Hoja6.Cells(Final, 77) = Me.Txt_Venta19    Hoja6.Cells(Final, 78) = Me.Txt_Cantidad19     Hoja6.Cells(Final, 79) = Me.Txt_TotalNetoUnd19
Hoja6.Cells(Final, 80) = Me.Txt_CdgoBarra20     Hoja6.Cells(Final, 81) = Me.Txt_Venta20    Hoja6.Cells(Final, 82) = Me.Txt_Cantidad20     Hoja6.Cells(Final, 83) = Me.Txt_TotalNetoUnd20

Agradecido nuevamente..

1 respuesta

Respuesta
2

Estoy suponiendo que buscas algo así, como no mencionas como cargas los datos en el listbox en la hoja1 hice una tabla que es cargada al iniciar el userform como se muestra en la segunda imagen

de este formulario al dar click sobre el commandbutton este ejecutara una macro que pasara todos los datos del listbox a una variable llamada matriz, la cual en un solo paso ira colocando cada 4 columnas la información quedando como e la imagen 1

 y este es el codigo

Private Sub CommandButton1_Click()
Set h2 = Worksheets("hoja2")
Set destino = h2.Range("d1").Resize(1, 4)
matriz = ListBox1.List
filas = UBound(matriz)
For i = 0 To filas
    If i > 0 Then
        Set destino = destino.Columns(5).Resize(1, 4)
    End If
    fila = WorksheetFunction.Index(matriz, i, 0)
    Sheets("hoja2").Range(destino.Address) = fila
Next i
Erase matriz: Erase fila
Set destino = Nothing
End Sub

Hola James... gracias por el comando y es lo que necesito, pero trate de agregar tu código a mi proyecto pero no me resulta...

El código que utilizo para guardar toda la información de mi formulario es este;

Private Sub Guardar_Click()
Dim Fila As Integer
Dim Final As Integer
Dim i As Integer
Dim Registro As Integer
        For Fila = 1 To 30000
            If Hoja6.Cells(Fila, 1) = "" Then
                Final = Fila
                Exit For
            End If
        Next
        For Registro = 2 To Final
            If Hoja6.Cells(Registro, 1) = Me.Label_Folio Then
                Exit Sub
                Exit For
            End If
        Next
                Hoja6.Cells(Final, 1) = Me.Label_Folio
                Hoja6.Cells(Final, 2) = Me.Cbo_RutCliente
                Hoja6.Cells(Final, 3) = Me.Label_Fecha
                Hoja6.Cells(Final, 84) = Me.Txt_Dias
                Hoja6.Cells(Final, 85) = Me.Txt_Descuento
                Hoja6.Cells(Final, 86) = Me.Txt_TotalNeto
                Hoja6.Cells(Final, 87) = Me.Txt_IVA
                Hoja6.Cells(Final, 88) = Me.Txt_Total
  Cbo_RutCliente.SetFocus
End Sub

Y todo lo que esta en mi listbox debo agregarlo desde la columna 4 hasta la 83 y este es mi formulario

Gracias...

En tu consulta inicial no mencionaste de que las filas se iban a estar recorriendo ni que antes de la columna 4 y de la columna 83 había información eso cambia la programación de la macro que en efecto no te iba a funcionar, así que viendo tu macro la modifique un poco para que use un ciclo For en vez de dos, la forma de detectar duplicados cambia y ahora como vez en la imagen ya esta comtemplada el resto de la información

y esta es la macro

Private Sub Guardar_Click()
With Hoja6.Range("a1").CurrentRegion
    filas = .Rows.Count
    col = .Columns.Count
End With
With Hoja6.Range("a1")
If col = 1 Then Set datos = .Resize(1, 88)
If col > 1 Then Set datos = .Rows(filas + 1).Resize(1, 88)
End With
With datos
    .Columns(1).Select
    indice = WorksheetFunction.CountIf(Range("a:a"), Label_Folio)
    If indice = 0 Then
    .Cells(1) = Me.Label_Folio
    .Cells(2) = Me.Cbo_RutCliente
    .Cells(3) = Me.Label_Fecha
    .Cells(84) = Me.Txt_Dias
    .Cells(85) = Me.Txt_Descuento
    .Cells(86) = Me.Txt_TotalNeto
    .Cells(87) = Me.Txt_IVA
    .Cells(88) = Me.Txt_Total
matriz = WorksheetFunction.Index(ListBox1.List, 0, 0)
columnas = 4
For i = 1 To UBound(matriz)
    If i = 1 Then Set lista = .Cells(4).Resize(1, 4)
    If i > 1 Then Set lista = lista.Columns(5).Resize(1, 4)
    Fila = WorksheetFunction.Index(ListBox1.List, i, 0)
    Sheets("Hoja6").Range(lista.Address) = Fila
Next i
Sheets("Hoja6").Range("a1").CurrentRegion.EntireColumn.AutoFit
End If
End With
Cbo_RutCliente.SetFocus
Erase matriz: Erase Fila
Set datos = Nothing
End Sub

Mis disculpas James, debí haberme expresado mejor... Te cuento me envía un error al ejecutarlo, se deberá a que mi hoja 6 la tengo con el nombre "Cotizaciones" y que el rango de los registros comienza de la Fila A2?

Este es el error que me envía con tu código;

Realice los cambios pensando en el rango inicial y en el nombre de la hoja y me manda el mismo error:

Que estoy haciendo mal???

Así es mi hoja de excel;

Agradeciendo tu ayuda, tu tiempo y tus conocimientos...

Borra la línea columns(2). Select, eso solo lo use para una comprobación, y no era 2 sino 1, si fuera por el nombre de la hoja te hubiera marcado error en las primeras líneas

Estimado James, ejecute el cambio y me guarda los datos de los textbox, pero no del listbox y me envía error en la matriz

Puede deberse a que tu listbox no se llama listbox1 sino que tiene un nombre personalizado como los textbox y combobox a los que identificaste con otro nombre

Estimado James, el nombre del listado a sido el mismo Listbox1.

Que sera el problema??? es lo único que me falta para terminar mi proyecto :(

Esta es la propiedad de mi listbox1, puede que ahí tenga una diferencia

Gracias...

La única es que subas tu archivo a un servicio de nube y pegues el link para verlo, así platicado ya resulta difícil ver que es

James... envió link de mi proyecto

https://1drv.ms/f/s!An72VgL_xDdIgp8Nfd9ZczraIXECkA 

Gracias...

Tu archivo esta dando demasiados problemas en varias variable por ejemplo en las variables uf me marca un error de biblioteca no encontrada, eso lo arreglo declarando la variable, me sale el mismo problema que a ti en el archivo lo curioso es que pasa aunque copie el formulario y las hojas ligadas a el en otro libro, volvi a programar en un 3er libro de nuevo la macro y si funciona pero al momento de integrarla a tu macro falla, asi que concluyo es que hay algo que programaste en tu macro que te esta creando un conflicto porque ni cambiando el nombre de matriz por otro nombre funciona la macro la otra es que la version que tienes de Excel no tenga una referencia o tenga una referencia en las bibliotecas que yo no tengo.

¡Gracias! James por tu tiempo y tus conocimientos, tendré que pensar otro método para lograr lo que necesito... pero aprendí bastante con tus consejos y me dan otras ideas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas