Factura en excel

Buen día y gracias por su respuesta a mi pregunta anterior. Creo que aprenderé mucho con su ayuda.
He tratado de hacer la siguiente macro que debe hacer una factura y tengo dos inquietudes 1. Otras paresidas me han funcionado, ¿cuál es el error en ésta?
2. Esta macro como está permite digitar solo un producto, luego finaliza, ¿cómo hacer cuando en la misma factura hay más de un producto? Y como finalizarla cuando yo decida, es decir cuando no hayan más productos.
Le pido el favor que tenga paciencia, soy nuevo en ésto, estudio contabilidad y trato de aprender ésto solo.
Gracias.
Public Sub Factura_Producto()
Dim strProducto As String
Dim strValor As String
Dim strCliente As String
Dim strNit As String
Dim strFecha As String
strProducto = InputBox("Producto")
Range("B5").Value = strProucto
strValor = InputBox("Valor")
Range("B6").Value = strValor
strCliente = InputBox("Nombre del cliente")
Range("D8").Value = strCliente
strNit = ImputBox("Número de identificación")
Range("C6").Value = strNit
strFecha = InputBox("Fecha")
Range("A1").Value = strFecha
End Sub
Respuesta
1
1º No sé si el error está en la transcripción, pero hay dos fallos en el código:
- En la línea 8 asignas 'strProucto' cuando lo correcto sería 'strProducto'
- En la línea 13 usas 'ImputBox' cuando lo correcto sería 'InputBox'
2º Necesitas realizar un bucle condicionado para que se tomen las líneas de la factura. En tu caso, la macro podría quedar algo así:
Public Sub Factura_Producto()
Dim strProducto, strIndice As String
Dim i As Integer
' Datos de la cabecera de la factura
ActiveSheet.Range("A2").Value = InputBox("Fecha del pedido", "Cabecera de pedido", Format(Now(), "short date"))
ActiveSheet.Range("B2").Value = InputBox("Número de identificación", "Cabecera de pedido")
ActiveSheet.Range("C2").Value = InputBox("Nombre del cliente", "Cabecera de pedido")
' Borra datos previos hasta un máximo de 35 líneas de pedido
ActiveSheet.Range("A5:D40").Value = ""
' Bucle para las líneas del detalle del pedido, empezando en línea 5
i = 5
Do
' Para finalizar se deja el producto en blanco o se pulsa Cancelar
strProducto = InputBox("Producto", "Detalle de pedido")
If strProducto <> "" Then
strIndice = Mid(Str(i), 2)
ActiveSheet.Range("A" + strIndice).Value = strProducto
With ActiveSheet.Range("B" + strIndice)
.Value = Val(InputBox("Cantidad", "Detalle de pedido", 0))
.NumberFormat = "0.00"
End With
With ActiveSheet.Range("C" + strIndice)
.Value = Val(InputBox("Valor", "Detalle de pedido", 0))
.NumberFormat = "0.00"
End With
'Cálculo del total por línea
With ActiveSheet.Range("D" + strIndice)
.Formula = "=B" + strIndice + "*C" + strIndice
.NumberFormat = "0.00"
End With
i = i + 1
End If
Loop While strProducto <> ""
' Cálculo del total de la factura
If i > 5 Then
With ActiveSheet.Range("D" + Mid(Str(i), 2))
.Formula = "=SUM(D5:D" + strIndice + ")"
.NumberFormat = "0.00"
End With
ActiveSheet.Range("C" + Mid(Str(i), 2)).Value = "TOTAL"
End If
End Sub
Para que quede bien pon primero los siguientes datos:
Celda A1 : Fec. Pedido
Celda B1 : Cod. Cliente
Celda C1 : Nombre
Celda A4 : Artículo
Celda B4 : Cantidad
Celda C4 : Valor
Celda D4 : Total
Puede que la macro no se ajuste exactamente a lo que necesitas, pero como material de estudio creo que es más que conveniente, ya que maneja varios conceptos que te interesa saber.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas