Como modificar la siguiente macro para que me guarde los productos uno debajo de otro

Agradecería su ayuda para modificar la siguiente macro para guardar los productos de una factura uno debajo del otro sin que me desplace las filas de los productos ya guardados.?

Sub btn_GuardarFacturaVenta()
Dim Fecha As Date
Set art = Hoja7.Range("B14:B28")
Dim cells As Range
For Each Cell In art
If Cell <> Empty Then
Hoja6.Range("A7:I7").Insert
Fecha = Hoja7.Range("F6")
Hoja6.Range("A7") = Fecha 'fecha
Hoja6.cells("B2") = Hoja7.Range("F4") 'numero de factura
Hoja6.Range("C7") = Cell.Offset(0, 1)  'descripcion del producto
Hoja6.Range("D7") = Cell               'codigo
Hoja6.Range("E7") = Cell.Offset(0, 2)  'cantidad
Hoja6.Range("F7") = Cell.Offset(0, 3)  'Precio
Hoja6.Range("G7") = Cell.Offset(0, 4)  'sub-total
Hoja6.Range("H7") = Hoja7.Range("C9") 'nombre del cliente
Hoja6.Range("I7") = Hoja7.Range("F9") 'cedula
Hoja6.Range("A6").Select
End If
Next
end sub

2 Respuestas

Respuesta
3

[Ho la Jesús. 

En esta línea de código, tienes un error, no debería ser cells("B2"), debe ser Range("B2")

Te dejo otra opción para considerar:

Sub btn_GuardarFacturaVenta()
  Dim c As Range
  Dim lr As Long
  With Hoja6
    For Each c In Hoja7.Range("B14:B28").SpecialCells(xlCellTypeConstants)
      lr = .Range("A" & Rows.Count).End(3).Row + 1
      .Range("A" & lr).Value = Hoja7.Range("F6").Value  'fecha
      .Range("B" & lr).Value = Hoja7.Range("F4").Value  'numero de factura
      .Range("C" & lr).Value = c.Offset(0, 1).Value     'descripcion del producto
      .Range("D" & lr).Value = c.Value                  'codigo
      .Range("E" & lr).Value = c.Offset(0, 2).Value     'cantidad
      .Range("F" & lr).Value = c.Offset(0, 3).Value     'Precio
      .Range("G" & lr).Value = c.Offset(0, 4).Value     'sub-total
      .Range("H" & lr).Value = Hoja7.Range("C9").Value  'nombre del cliente
      .Range("I" & lr).Value = Hoja7.Range("F9").Value  'cedula
    Next
  End With
End Sub

¡Te agradezco mucho amigo!  esta opción me funciono muy bien tal cual me la enviaste.

de igual forma corregí el error de la otra macro que mencionaste. excelente!!

Respuesta
2

Entiendo que ya no quieres que se te inserte una fila por encima sino ir colocando los datos hacia abajo.

En ese caso primero debes encontrar cuál es la primer fila vacía (hay varios modos. En video 30 de mi canal explico el método CurrentRegion que es otra manera de encontrarla). Y luego pasar cada campo a cada col de esa fila.

Sub btn_GuardarFacturaVenta()
Dim Fecha As Date
Set art = Hoja7.Range("B14:B28")
Dim cells As Range
'establecer la primera fila vacía
x = Hoja6.Range("A" & Rows.Count).End(xlUp).Row + 1
For Each Cell In art
    If Cell <> Empty Then
        Fecha = Hoja7.Range("F6")
        Hoja6.Range("A" & x) = Fecha 'fecha
        Hoja6.cells("B2") = Hoja7.Range("F4") 'numero de factura
        Hoja6.Range("C" & x) = Cell.Offset(0, 1)   'descripcion del producto
        Hoja6.Range("D" & x) = Cell               'codigo
        Hoja6.Range("E" & x) = Cell.Offset(0, 2)  'cantidad
        Hoja6.Range("F" & x) = Cell.Offset(0, 3)  'Precio
        Hoja6.Range("G" & x) = Cell.Offset(0, 4)  'sub-total
        Hoja6.Range("H" & x) = Hoja7.Range("C9") 'nombre del cliente
        Hoja6.Range("I" & x) = Hoja7.Range("F9") 'cedula
        'se incrementa la fila
        x = x + 1
    End If
Next
End Sub

Observa que en col B no hice el cambio porque decía B2 en lugar de B7.... aunque pareciera un error. 

Sdos y no olvides valorar la respuesta.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas