Następny numer faktury - Aktualności

Microsoft Excel oferuje wiele szablonów faktur, które można pobrać. Ale nie ma wbudowanego sposobu zwiększania do następnego numeru faktury.

Nagrałem to wideo pokazujące, jak dodać kilka wierszy kodu VBA do skoroszytu, abyś mógł zapisać każdą fakturę jako nowy plik. Makro następnie czyści fakturę i dodaje 1 do numeru faktury.

Przy 166 tysiącach wyświetleń i setkach komentarzy ciągle pojawiają się te same pytania. Proszenie ludzi o przeczytanie 800 komentarzy stało się niepraktyczne, ponieważ odpowiedź na ich pytanie została opublikowana już sześć razy. Tak więc - w przypadku popularnych pytań zamieszczam kod tutaj.

FAQ nr 1

Czy możesz wpisać kod za mnie, ponieważ nie mogę wpisać?

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 nr 2

Chcę zapisać fakturę jako plik PDF na komputerze z systemem Windows

Uwaga

Ten kod działa tylko w wersjach programu Excel 2010 lub nowszych dla systemu Windows. Dla Maca jest inny kod.

Musisz wybrać zakres zawierający fakturę i wykonać Układ strony, Obszar wydruku, Ustaw obszar wydruku. Jeśli pominiesz ten krok, to przyciski służące do uruchomienia makra pojawią się na Twojej fakturze!

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 nr 3

Chcę zapisać fakturę jako plik Excel i PDF w innym folderze

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 nr 4

Mój numer faktury zawiera cyfry i litery

Będziesz musiał dostosować kod. Oto kilka przykładów. Heidi ma numer faktury, taki jak SS15001. Kiedy patrzę na ten numer faktury, jest to dwuliterowy prefiks, po którym następuje 5 cyfr. Nowy numer faktury musi zawierać LEWY (, 2) i ŚRODEK (, 3,5):

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

Oto bardziej złożony przykład. Numer faktury to IN-1234-HA, gdzie IN- oznacza fakturę. 1234 to kolejny numer. HA jest pierwszą literą nazwy klienta znajdującą się w 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

Możesz uprościć powyższe cztery wiersze w następujący sposób:

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

FAQ nr 5

Mam inne makra w skoroszycie (na przykład SpellNumber) i potrzebuję również ich zapisania.

Strategia jest nieco inna, aby umożliwić uruchamianie innych makr w celu dalszego działania funkcji liczb na słowa. Zamiast kopiować tylko arkusz faktury do nowego skoroszytu i używać opcji Zapisz jako, (a) Zapamiętaj ścieżkę i nazwę pliku skoroszytu, (b) Użyj polecenia Zapisz jako, aby zapisać cały skoroszyt z numerem faktury w nazwie, (c ) Usuń oryginalny skoroszyt. (d) Użyj SaveAs, aby zapisać skoroszyt pod oryginalną nazwą.

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 nr 6

Muszę chronić arkusz, aby moi pracownicy mogli zmieniać tylko niektóre komórki. Kiedy uruchamiam Twoje makro, otrzymuję komunikat „Komórka, którą próbujesz zmienić, jest chroniona, a zatem tylko do odczytu”

Możesz wyłączyć ochronę arkusza w makrze, wpisać nowy numer faktury, a następnie zabezpieczyć arkusz. Wystarczy to zrobić w makrze NextInvoice. Drugie makro nie wprowadza zmian w żadnych komórkach. Oto kod, jeśli używasz ochrony bez hasł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

FAQ # 7

Nie chcę mieć przycisku Zapisz w zapisanym skoroszycie

Jest to trudne, ponieważ nazwa kształtu zmieni się, gdy arkusz zostanie przeniesiony do nowego skoroszytu. Bardzo uważnie wykonaj następujące kroki:

  1. Otwórz skoroszyt makra faktury
  2. Kliknij prawym przyciskiem myszy kartę arkusza zawierającą fakturę. Wybierz Przenieś lub Kopiuj.
  3. W menu rozwijanym Do książki: wybierz opcję Nowa książka. Zaznacz pole wyboru Utwórz kopię. Kliknij OK. Ten krok 3 symuluje ActiveSheet.Copy w VBA.
  4. Teraz, gdy masz już arkusz faktury w nowym skoroszycie, kliknij z wciśniętym klawiszem Ctrl kształt, który chcesz usunąć. Ctrl + kliknięcie wybierze kształt bez uruchamiania makra.
  5. Po zaznaczeniu kształtu spójrz w lewo od paska formuły. W polu nazwy zostanie wyświetlona nazwa, na przykład „Okrągły prostokąt 1”. Bardzo ostrożnie zbuduj nową linię kodu, aby usunąć ten kształt, jak pokazano poniżej tuż po ActiveSheet.
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

Rozwiązywanie problemów i komunikaty o błędach

  1. W skoroszytach bez makr nie można zapisać następujących funkcji: Projekt VB. Odpowiedź: Twój plik jest obecnie zapisany jako plik XLSX. Jestem równie zirytowany, że Microsoft wybrał domyślnie uszkodzony typ pliku. Użyj polecenia Plik, Zapisz jako i zmień typ pliku na XLSB lub 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. Błąd wykonania 1004. Dokument nie został zapisany. Odpowiedź: Ścieżka do pliku musi być dokładna. Tuż przed zapisaniem pliku dodaj nową linię z MsgBox NewFN. Uruchom kod. Pojawi się okno pokazujące ścieżkę do pliku i nazwę pliku. Upewnij się, że między ścieżką a nazwą pliku jest separator ścieżki.
  6. Błąd czasu wykonywania „1004”. Metoda „SaveAs” obiektu „_Workbook” nie powiodła się. Odpowiedź: FileFormat musi być FileFormat: = xlOpenXMLWorkbook. Po przeczytaniu powinno brzmieć jak „Excel Open XML Workbook”. Nie jest to skoroszyt Ex One Open XML. Tak, to mylące, że cyfra 1 i mała litera L wyglądają podobnie na filmie. 1l. Zmień X1OPENXMLWORKBOOK na XLOPENXMLWORKBOOK.

Interesujące artykuły...