Pues resulta que hace tiempo hice un pequeño programa para hacer facturas con excel y vba, pero he descubierto que cuando escribo en la factura unas cantidades con decimales pues al guardarlas en el registro de vba no hace caso a dichos decimales, considerando que no son tales y me agrega dos decimales.
Me explico , si yo pongo en cantidad 2, precio unitario 15,15, me da un total de 30,30, al que luego se le calcula su iva y el total, pues al grabar estos datos en el registro me guarda en Cantidad 2, en precio unitario 1.515,00 y en subtotal 3.030,00.
El codigo con el que recogo estos datos es el siguiente:
Call Abrir_Tb_Detalle_Facturas
ActiveSheet.Range("A24").Activate
With RsDetalleFacturas
Do While ActiveCell.Value <> ""
If .EOF Or .BOF Then
'si la base de datos de detalles esta vacia
'agregamos
.AddNew
.Fields(1) = pesado 'UCase(ActiveCell.Offset(-15, 2).Value) 'no consigo grabar este dato con celda
.Fields(2) = UCase(ActiveCell.Value) 'descripcion
.Fields(3) = UCase(ActiveCell.Offset(0, 1).Value) 'cantidad .Fields(4) = UCase(ActiveCell.Offset(0, 2).Value) 'precio unitario
.Fields(5) = UCase(ActiveCell.Offset(0, 3).Value) 'importe bruto
.Fields(6) = numfac 'UCase(ActiveCell.Offset(-15, 3).Value) 'numero de la factura escrita
.Fields(7) = nif 'nif del cliente
.Update
Else 'y si no esta vacia la base de datos de detalles, pues buscamos ese detalle
.Requery
'agregamos
.AddNew
.Fields(1) = pesado 'UCase(ActiveCell.Offset(-15, 2).Value) 'no consigo grabar este dato con celda
.Fields(2) = UCase(ActiveCell.Value) 'descripcion
.Fields(3) = UCase(ActiveCell.Offset(0, 1).Value) 'cantidad .Fields(4) = UCase(ActiveCell.Offset(0, 2).Value) 'precio unitario
.Fields(5) = UCase(ActiveCell.Offset(0, 3).Value) 'importe bruto
.Fields(6) = numfac 'UCase(ActiveCell.Offset(-15, 3).Value) 'pesado 'numero de la factura escrita
.Fields(7) = nif 'nif del cliente
.Update
End If
ActiveCell.Offset(1, 0).Activate
Loop
Call Cerrar_Tb_Detalle_Facturas
End With
Call Desconectar_Base
ActiveSheet.Range("C17").Activate
ActiveWorkbook.Save
MsgBox "la factura ha sido agregada correctamente a la base de datos", vbInformation
Call Finalizar_Macro
End If
End With
Call Crear_Pdf
MsgBox "El fichero pdf se ha grabado correctamente", vbInformation
End Sub
y en el registro lo tengo configurado de la siguiente manera
Cantidad = Numero
Precio_Unitario = Moneda, con las siguientes especificaciones:
formato euro
2 decimales
requerido si
indexado no
Precio_Bruto = Moneda, con las mismas especificaciones que Precio_Unitario
No se si lo que tengo es que cambiar la formula con la que cogo el numero de la celda o si tengo que cambiar la configuración del registro.
Siento haberme extendido tanto, pero el programa subirlo es muy grande
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
Pues resulta que hace tiempo hice un pequeño programa para hacer facturas con excel y vba, pero he descubierto que cuando escribo en la factura unas cantidades con decimales pues al guardarlas en el registro de vba no hace caso a dichos decimales, considerando que no son tales y me agrega dos decimales.
Me explico , si yo pongo en cantidad 2, precio unitario 15,15, me da un total de 30,30, al que luego se le calcula su iva y el total, pues al grabar estos datos en el registro me guarda en Cantidad 2, en precio unitario 1.515,00 y en subtotal 3.030,00.
El codigo con el que recogo estos datos es el siguiente:
Call Abrir_Tb_Detalle_Facturas
ActiveSheet.Range("A24").Activate
With RsDetalleFacturas
Do While ActiveCell.Value <> ""
If .EOF Or .BOF Then
'si la base de datos de detalles esta vacia
'agregamos
.AddNew
.Fields(1) = pesado 'UCase(ActiveCell.Offset(-15, 2).Value) 'no consigo grabar este dato con celda
.Fields(2) = UCase(ActiveCell.Value) 'descripcion
.Fields(3) = UCase(ActiveCell.Offset(0, 1).Value) 'cantidad
.Fields(4) = UCase(ActiveCell.Offset(0, 2).Value) 'precio unitario
.Fields(5) = UCase(ActiveCell.Offset(0, 3).Value) 'importe bruto
.Fields(6) = numfac 'UCase(ActiveCell.Offset(-15, 3).Value) 'numero de la factura escrita
.Fields(7) = nif 'nif del cliente
.Update
Else 'y si no esta vacia la base de datos de detalles, pues buscamos ese detalle
.Requery
'agregamos
.AddNew
.Fields(1) = pesado 'UCase(ActiveCell.Offset(-15, 2).Value) 'no consigo grabar este dato con celda
.Fields(2) = UCase(ActiveCell.Value) 'descripcion
.Fields(3) = UCase(ActiveCell.Offset(0, 1).Value) 'cantidad
.Fields(4) = UCase(ActiveCell.Offset(0, 2).Value) 'precio unitario
.Fields(5) = UCase(ActiveCell.Offset(0, 3).Value) 'importe bruto
.Fields(6) = numfac 'UCase(ActiveCell.Offset(-15, 3).Value) 'pesado 'numero de la factura escrita
.Fields(7) = nif 'nif del cliente
.Update
End If
ActiveCell.Offset(1, 0).Activate
Loop
Call Cerrar_Tb_Detalle_Facturas
End With
Call Desconectar_Base
ActiveSheet.Range("C17").Activate
ActiveWorkbook.Save
MsgBox "la factura ha sido agregada correctamente a la base de datos", vbInformation
Call Finalizar_Macro
End If
End With
Call Crear_Pdf
MsgBox "El fichero pdf se ha grabado correctamente", vbInformation
End Sub
y en el registro lo tengo configurado de la siguiente manera
Cantidad = Numero
Precio_Unitario = Moneda, con las siguientes especificaciones:
formato euro
2 decimales
requerido si
indexado no
Precio_Bruto = Moneda, con las mismas especificaciones que Precio_Unitario
No se si lo que tengo es que cambiar la formula con la que cogo el numero de la celda o si tengo que cambiar la configuración del registro.
Siento haberme extendido tanto, pero el programa subirlo es muy grande