Número da próxima fatura - Notícias

O Microsoft Excel oferece muitos modelos de faturas que você pode baixar. Mas não há uma maneira embutida de incrementar para o próximo número da fatura.

Gravei este vídeo mostrando como adicionar algumas linhas de código VBA à sua pasta de trabalho para que você possa salvar cada fatura como um novo arquivo. A macro então limpa a fatura e adiciona 1 ao número da fatura.

Com 166 mil visualizações e centenas de comentários, estou descobrindo que as mesmas perguntas surgem continuamente. Tornou-se impraticável pedir às pessoas que leiam 800 comentários porque a resposta à sua pergunta foi postada seis vezes antes. Então - para perguntas populares, estou postando o código aqui.

FAQ # 1

Você pode digitar o código para mim porque não consigo digitar?

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

Quero salvar a fatura como PDF em um PC com Windows

Nota

Este código funciona apenas nas versões do Windows do Excel 2010 ou mais recentes. Existe um código diferente para um Mac.

Você deve selecionar o intervalo que contém a fatura e fazer Layout da Página, Área de Impressão, Definir Área de Impressão. Se você pular esta etapa, os botões usados ​​para executar a macro aparecerão na sua fatura!

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

FAQ # 3

Quero salvar a fatura como um arquivo do Excel e um PDF em uma pasta 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

FAQ # 4

O número da minha fatura contém números e letras

Você terá que adaptar o código. Aqui estão alguns exemplos. Heidi tem um número de fatura como SS15001. Quando olho para o número da fatura, vejo um prefixo de duas letras seguido de 5 dígitos. O novo número da fatura deve usar o LEFT (, 2) e o MID (, 3,5):

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

Aqui está um exemplo mais complexo. O número da fatura é IN-1234-HA onde a IN- significa Fatura. O 1234 é um número sequencial. O HA é o primeiro a letras do nome do cliente encontradas em 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

Você pode simplificar as quatro linhas acima da seguinte maneira:

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

FAQ # 5

Tenho outras macros na pasta de trabalho (como SpellNumber) e preciso que as macros também sejam salvas.

Para permitir que suas outras macros sejam executadas para que a função Numbers-to-Words continue funcionando, a estratégia é um pouco diferente. Em vez de copiar apenas a folha de fatura para uma nova pasta de trabalho e usar Salvar como, você (a) lembrará o caminho e o nome do arquivo da pasta de trabalho, (b) usará Salvar como para salvar a pasta de trabalho inteira com o número da fatura no nome, (c ) Exclua a pasta de trabalho original. (d) Use Salvar como para salvar a pasta de trabalho com o nome 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

FAQ # 6

Preciso proteger a planilha para que meus funcionários só possam alterar algumas células. Quando executo sua macro, obtenho "A célula que você está tentando alterar está protegida e, portanto, somente leitura"

Você pode desproteger a planilha na macro, escrever o novo número da fatura e proteger a planilha. Isso só precisa ser feito na macro NextInvoice. A outra macro não está fazendo alterações em nenhuma célula. Aqui está o código se você estiver usando proteção sem uma senha:

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

FAQ # 7

Não quero o botão Salvar na pasta de trabalho salva

Isso é complicado porque o nome da sua forma mudará quando a planilha for movida para uma nova pasta de trabalho. Siga estas etapas com muito cuidado:

  1. Abra a pasta de trabalho da macro da fatura
  2. Clique com o botão direito do mouse na guia da planilha que contém sua fatura. Escolha Mover ou Copiar.
  3. Na lista suspensa To Book :, escolha New Book. Escolha a caixa de seleção para Criar uma cópia. Clique OK. Esta etapa 3 simula o ActiveSheet.Copy no VBA.
  4. Agora que você tem a planilha de fatura em uma nova pasta de trabalho, pressione Ctrl e clique na forma que deseja excluir. Ctrl + Clique selecionará a forma sem executar a macro.
  5. Com a forma selecionada, olhe para a esquerda da Barra de Fórmulas. A caixa de nome mostrará um nome como "Retângulo arredondado 1". Com muito cuidado, crie uma nova linha de código para excluir esta forma, conforme mostrado abaixo, logo após ActiveSheet.Copy:
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

Resolução de problemas e mensagens de erro

  1. Os seguintes recursos não podem ser salvos em pastas de trabalho livres de macro: Projeto VB. Resposta: Seu arquivo está salvo como um arquivo XLSX. Estou igualmente irritado com o fato de a Microsoft ter escolhido usar um tipo de arquivo corrompido como padrão. Use Arquivo, Salvar como e altere o tipo de arquivo para XLSB ou 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. Erro de tempo de execução 1004. Documento não salvo. Resposta: O caminho do arquivo deve ser exato. Antes de salvar o arquivo, adicione uma nova linha com MsgBox NewFN. Execute o código. Uma caixa aparecerá mostrando o caminho e o nome do arquivo. Certifique-se de que haja um separador de caminho entre o caminho e o nome do arquivo.
  6. Erro de tempo de execução '1004'. O método 'SaveAs' do objeto '_Workbook' falhou. Resposta: O FileFormat deve ser FileFormat: = xlOpenXMLWorkbook. Quando você lê-lo, deve soar como "Excel Open XML Workbook". Não é uma pasta de trabalho Ex One Open XML. Sim, é confuso que um número 1 e um L minúsculo sejam parecidos no vídeo. 1l. Altere seu X1OPENXMLWORKBOOK para XLOPENXMLWORKBOOK.

Artigos interessantes...