Siguiente número de factura - Noticias

Microsoft Excel ofrece muchas plantillas de facturas que puede descargar. Pero no hay una forma incorporada de incrementar al siguiente número de factura.

Grabé este video que muestra cómo agregar algunas líneas de código VBA a su libro de trabajo para que pueda guardar cada factura como un archivo nuevo. Luego, la macro borra la factura y agrega 1 al número de factura.

Con 166K vistas y cientos de comentarios, encuentro que las mismas preguntas surgen una y otra vez. Se ha vuelto poco práctico pedirle a la gente que lea 800 comentarios porque la respuesta a su pregunta se ha publicado seis veces antes. Entonces, para preguntas populares, estoy publicando el código aquí.

FAQ # 1

¿Puede escribir el código por mí porque no puedo escribir?

Sub NextInvoice() Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

FAQ # 2

Quiero guardar la factura como PDF en una PC con Windows

Nota

Este código solo funciona en versiones de Windows de Excel 2010 o posteriores. Existe un código diferente para Mac.

Debe seleccionar el rango que contiene la factura y hacer Diseño de página, Área de impresión, Establecer área de impresión. Si omite este paso, los botones utilizados para ejecutar la macro aparecerán en su factura.

Sub SaveInvoiceAsPDFAndClear() Dim NewFN As Variant NewFN = "C:aaaInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub

Preguntas frecuentes n. ° 3

Quiero guardar la factura como archivo Excel y PDF en una carpeta diferente

Sub SaveInvoiceBothWaysAndClear() Dim NewFN As Variant ' Create the PDF First NewFN = "C:aaaPDFInvoicesInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False ' Next, Save the Excel File ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ' Increment the invoice number Range("E5").Value = Range("E5").Value + 1 ' Clear out the invoice fields Range("A20:E39").ClearContents End Sub

Preguntas frecuentes n. ° 4

Mi número de factura tiene números y letras

Tendrás que adaptar el código. Aquí hay unos ejemplos. Heidi tiene un número de factura como SS15001. Cuando miro ese número de factura, es un prefijo de dos letras seguido de 5 dígitos. El nuevo número de factura debe usar LEFT (, 2) y MID (, 3,5):

Range("E5").Value = Left(Range("E5").Value, 2) & 1 + Mid(Range("E5").Value, 3, 5)

Aquí hay un ejemplo más complejo. El número de factura es IN-1234-HA donde IN- significa Factura. El 1234 es un número secuencial. La HA es la primera en letras del nombre del cliente que se encuentran en B10.

LeftPart = Left(Range("E5").Value, 3) MidPart = Left(Range("E5").Value, 4, 4) + 1 EndPart = Left(Range("A10").Value, 2) Range("E5").Value = LeftPart & MidPart & EndPart

Puede simplificar las cuatro líneas anteriores de la siguiente manera:

Range("E5").Value = Left(Range("E5").Value, 3) & Left(Range("E5").Value, 4, 4) + 1 & Left(Range("A10").Value, 2)

Preguntas frecuentes n. ° 5

Tengo otras macros en el libro de trabajo (como SpellNumber) y también necesito que las macros se guarden.

Para permitir que se ejecuten sus otras macros para que la función Números a palabras siga funcionando, la estrategia es un poco diferente. En lugar de copiar solo la hoja de la factura a un nuevo libro de trabajo y usar Guardar como, (a) recordará la ruta y el nombre del archivo del libro de trabajo, (b) Utilizará Guardar como para guardar todo el libro de trabajo con el número de factura en el nombre, (c ) Elimine el libro de trabajo original. (d) Utilice Guardar como para guardar el libro con el nombre original.

Sub SaveInvoiceWithNewName() Dim OrigFN as Variant Dim NewFN As Variant ' Remember the original path and file name OrigFN = ThisWorkbook.FullName NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ' Save a copy with the new name ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ' Delete the original workbook so you can save without warning On Error Resume Next Kill (OrigFN) On Error Goto 0 ' Save again as the original file name ActiveWorkbook.SaveAs OrigFN, FileFormat:=xlOpenXMLWorkbook NextInvoice End Sub

Preguntas frecuentes n. ° 6

Necesito proteger la hoja de trabajo para que mis empleados solo puedan cambiar algunas celdas. Cuando ejecuto su macro, obtengo "La celda que está intentando cambiar está protegida y, por lo tanto, es de solo lectura"

Puede desproteger la hoja en la macro, escribir el nuevo número de factura y luego proteger la hoja. Esto solo debe realizarse en la macro NextInvoice. La otra macro no realiza cambios en ninguna celda. Aquí está el código si está usando protección sin contraseña:

Sub NextInvoice() ActiveSheet.Unprotect Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Here is the code if you have protected the sheet with a password of Tomato. Note that the password appears in this code twice. Change the password to the real password in two places. Sub NextInvoice() ActiveSheet.Unprotect Password:="Tomato" Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect Password:="Tomato", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

Preguntas frecuentes n. ° 7

No quiero tener el botón Guardar en el libro guardado

Esto es complicado porque el nombre de su forma cambiará cuando la hoja de trabajo se mueva a un nuevo libro de trabajo. Siga estos pasos con mucho cuidado:

  1. Abrir el libro de macros de facturas
  2. Haga clic con el botón derecho en la pestaña de la hoja que contiene su factura. Elija Mover o Copiar.
  3. En el menú desplegable Para reservar: elija Nuevo libro. Elija la casilla de verificación para Crear una copia. Haga clic en Aceptar. Este paso 3 simula ActiveSheet.Copy en VBA.
  4. Ahora que tiene la hoja de trabajo de la factura en un nuevo libro de trabajo, presione Ctrl y haga clic en la forma que desea eliminar. Ctrl + Click seleccionará la forma sin ejecutar la macro.
  5. Con la forma seleccionada, mire a la izquierda de la barra de fórmulas. El cuadro de nombre mostrará un nombre como "Rectángulo redondeado 1". Con mucho cuidado, cree una nueva línea de código para eliminar esta forma, como se muestra a continuación, justo después de ActiveSheet. Copiar:
Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy ActiveSheet.Shapes("Rounded Rectangle 1").Delete NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

Solución de problemas y mensajes de error

  1. Las siguientes funciones no se pueden guardar en libros de trabajo sin macros: Proyecto VB. Respuesta: Su archivo está guardado actualmente como un archivo XLSX. Me molesta igualmente que Microsoft haya elegido utilizar un tipo de archivo roto como predeterminado. Utilice Archivo, Guardar como y cambie el tipo de archivo a XLSB o XLSM.
  2. Type Mismatch. Answer: The code expects your invoice number to be a number. If you have SS15001 as an invoice number, you will have to figure out how to adapt your code. See FAQ #4 above.
  3. Compile error Expected line number or label or statement or end of statement on NewFN = “F:RobinusinessPCreceiptsInv” & Range(“H10”).Value & “.xlsx”. Answer: VBA does not like slanted quotation marks (also called Typographers quotes). Type the quotation mark in VBA and you will get "F:RobinusinessPCreceiptsInv" & Range("H10").Value & ".xlsx"
  4. We couldn't find C:UserJelenDocuments" Answer: The file path has to be exact. Are you sure you didn't mean C:UsersJelenDocuments? (Note the "s" at the end of users)
  5. Error de tiempo de ejecución 1004. Documento no guardado. Respuesta: La ruta del archivo debe ser exacta. Justo antes de guardar el archivo, agregue una nueva línea con MsgBox NewFN. Ejecute el código. Aparecerá un cuadro que muestra la ruta y el nombre del archivo. Asegúrese de que haya un separador de ruta entre la ruta y el nombre del archivo.
  6. Error de tiempo de ejecución '1004'. El método 'SaveAs' del objeto '_Workbook' falló. Respuesta: FileFormat debe ser FileFormat: = xlOpenXMLWorkbook. Cuando lo lea, debería sonar como "Excel Open XML Workbook". No es Ex One Open XML Workbook. Sí, es confuso que un número 1 y una L minúscula se parezcan en el video. 1l. Cambie su X1OPENXMLWORKBOOK a XLOPENXMLWORKBOOK.

Articulos interesantes...