Pasar datos de un listbox a hoja

Buenos días necesito de ser posible pasar los datos del listbox1 a la hoja CLIENTE. El listbox trae los datos que tengo en la hoja CAJA en la columna K y L necesito pasarlos, pude encontrar un código que casi lo logra pero le falta algo. En el código busca la ultima fila escrita en la columna A para luego poner la fecha y los datos del list box pero necesito que cuando termine de pasar los datos se detenga. Espero me entiendan.

K                          L

descripcion            precio

campera                   20

remera                      10

aros                           25

--------------------------------------------------

El formulario es más o menos así:

listbox

________________

campera        20

remera           10

aros                25

___________________

Entrega     /`-------/ (textbox4)

Aceptar (CommandButton1)      Cancelar(CommandButton2)

private Sub CommandButton1_Click()

For i = 0 To ListBox1.ListCount - 1
Range("A8").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
ActiveCell.FormulaR1C1 = Date
ActiveCell.Offset(0, 1).Activate
ActiveCell = ListBox1.List(i, 0)

ActiveCell.Offset(0, 1).Activate
ActiveCell = ListBox1.List(i, 1)

ActiveCell.Offset(0, 1).Activate
ActiveCell = TextBox4

ActiveCell.Offset(0, 1).Activate

Next

Range("A8").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop

ActiveCell.FormulaR1C1 = Date
ActiveCell.Offset(0, 1).Activate
ActiveCell = ListBox1.List(i + 1, 0)

ActiveCell.Offset(0, 1).Activate
ActiveCell = ListBox1.List(i + 1, 1)
ActiveCell.Offset(0, 1).Activate

Dim nomPag As String
nomPag = ActiveSheet.Name


End Sub

Luego quisiera que el textbox4 "entrega" que pasa el dato a la columna "D" lo haga una sola vez y luego coloque "0"

Como verán es una planilla de un cliente y quiero que me copie todos los productos que compra uno debajo del otro, actualmente lo que hago es ponerlos todos juntos en un mismo casillero pero cuando hay varios productos no se pueden leer.

Desde ya muchas gracias

Respuesta
1

Te dejo un par de ajustes para que pruebes y me comentes lo que todavía debiera agregar/quitar porque muy claro no se ve tu código.

Private Sub CommandButton1_Click()
'comentada x Elsamatilde
'guarda la 1er fila libre según col A
libre = Range("A" & Rows.Count).End(xlUp).Row +1
'recorre el listbox
For i = 0 To ListBox1.ListCount - 1
'coloca datos en la fila libre a partir de A
Range("A" & libre) = Date                'no es necesario colocar 'Formula
Range("B" & libre) = ListBox1.List(i, 0) 'no es necesario seleccionar la celda con Offset
Range("C" & libre) = ListBox1.List(i, 1)
'para pasar 1 sola vez el textbox4 evalúo si es el 1er elemento (i=0)
If i = 0 Then
    Range("D" & libre) = TextBox4
Else
    Range("D" & libre) = 0
End If
'incremento la fila para seguir con el siguiente elemento del ListBox
libre = libre + 1
Next i
'aquí sigue tu código
Dim nomPag As String
nomPag = ActiveSheet.Name
End Sub

Es buena costumbre utilizar la expresión Range("A" & ...) para poder fácilmente ubicar en qué col estamos colocando cada valor. Si tuvieras 10 col de datos, calcula cuántas instrucciones menos necesitas.

Probala y si quedó resuelta esta parte no olvides valorar/finalizar la consulta.

PD) Te invito a visitar la sección Macros de mi sitio renovado. Allí dejo bastante código, por ej como ubicar la primer fila libre.l

Sdos

Elsa

Buenos días Elsa, antes que nada agradecerte ya que muchas respuestas las he resuelto gracias a tus soluciones.

Me queda un arreglo nada más, el listbox me trae los datos de RowSouce: Caja! K3:L50 (no se otra forma de hacerlo) son datos de productos que voy colocando en esta columna mientras los voy vendiendo. Pueden ser 1, 2 o 20 artículos lo que necesito es que me pase a la hoja esos artículos. El código que me pasaste anda perfecto simplemente luego de que terminan los artículos (productos) me sigue pasando los espacios vacíos. Por ejemplo en K3 tengo camperas en K4 Remera K5 aros y en la columna L sus respectivos precios L3 20; L4 10; L5 25 en las filas siguientes como solo vendí tres productos quedan vacías, necesito que pase esas tres filas nada más y cuando tenga 10 productos vendidos me pase las 10 filas. El código que me mandaste pasa las tres filas perfecto pero luego me pasa las filas vacías también.

Lo del texbox 4 impecable.

Muchas gracias

¿Tu idea es seleccionar 'algunos' items del listbox y necesitas que esos se vuelquen a la hoja? Sería el caso de una selección múltiple.

Mejor enviame tu hoja con el formulario y la macro a mi correo para que no perdamos tiempo en el intento.

Sdos!

Ya te lo envié al correo que tenia yo.

saludos

Tu problema radica en que llenas el listbox con un rango fijo y si bien se ven solo 3 filas con datos, en realidad el listbox tiene muchas más filas cargadas pero vacías.

Entonces, quitale el contenido a la propiedad RowSource.

En el código agregá esta rutina para llenarlo de modo manual:

Private Sub UserForm_Initialize()
'x Elsamatilde
'llena la lista solo con registros con datos en col K
filx = Sheets("CAJA").Range("K" & Rows.Count).End(xlUp).Row
ListBox1.RowSource = "=CAJA!K3:L" & filx
End Sub

Y ahora el resto del código sigue sin cambios, funcionando tal como lo solicitaste. Te estoy enviando el libro.

Sdos

Elsa

Buenos días Elsa me surgió algo nuevo y necesito nuevamente de tu ayuda.

Cuando abro el formulario me trae los datos al listbox (K3:L) necesito poder seleccionar del listbox y borrarlos, si es posible con doble clik

estuve mirando y en otra pregunta lo resolviste de esta manera 

If Listbox1.ListIndex = -1 Then
Exit Sub 'si no se seleccionó ningún item cancela
End If
Listbox1.RemoveItem (Listbox1.ListIndex) 

pero en mi caso me tira un error no especificado seguramente mi pregunta es diferente.

por lo que leí en otras preguntas para poder eliminar con Removitem hay que llenar la lista con additem?

Espero me puedas ayudar

Gracias

Efectivamente, con RowSource no es posible utilizar RemoveITem.

PD) Por favor para nuevos temas debes iniciar nuevas consultas aunque sea una extensión de tu problema original.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas