Microsoft Excel предлага много шаблони за фактури, които можете да изтеглите. Но няма вграден начин за увеличаване до следващия номер на фактура.
Записах това видео, показващо как да добавите няколко реда VBA код към вашата работна книга, за да можете да запазите всяка фактура като нов файл. След това макросът изчиства фактурата и добавя 1 към номера на фактурата.
С 166 000 изгледа и стотици коментари откривам, че едни и същи въпроси се появяват отново и отново. Стана непрактично да се иска от хората да прочетат 800 коментара, защото отговорът на въпроса им е публикуван шест пъти преди това. И така - за популярни въпроси публикувам кода тук.
ЧЗВ # 1
Можете ли да въведете кода за мен, защото не мога да въведа?
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
ЧЗВ # 2
Искам да запазя фактурата като PDF на компютър с Windows
Забележка
Този код работи само в Windows версии на Excel 2010 или по-нови. Има различен код за Mac.
Трябва да изберете диапазона, който съдържа фактурата, и да направите Layout Page, Print Area, Set Print Area. Ако пропуснете тази стъпка, бутоните, използвани за стартиране на макроса, ще се появят във вашата фактура!
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
ЧЗВ # 3
Искам да запазя фактурата като файл на Excel и като PDF в различна папка
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
ЧЗВ # 4
Моят номер на фактура има цифри и букви
Ще трябва да адаптирате кода. Ето няколко примера. Хайди има номер на фактура като SS15001. Когато погледна този номер на фактура, това е двубуквен префикс, последван от 5 цифри. Новият номер на фактура трябва да използва НАЛЯВО (, 2) и MID (, 3,5):
Range("E5").Value = Left(Range("E5").Value, 2) & 1 + Mid(Range("E5").Value, 3, 5)
Ето един по-сложен пример. Номерът на фактурата е IN-1234-HA, където IN- означава фактура. 1234 е пореден номер. HA е първата буква до името на клиента, намерена в 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
Можете да опростите горните четири реда, както следва:
Range("E5").Value = Left(Range("E5").Value, 3) & Left(Range("E5").Value, 4, 4) + 1 & Left(Range("A10").Value, 2)
ЧЗВ # 5
Имам други макроси в работната книга (като SpellNumber) и имам нужда макросите също да бъдат запазени.
За да позволите на другите си макроси да се изпълняват, за да може функцията Numbers to-Words да продължи да работи, стратегията е малко по-различна. Вместо да копирате само листа с фактури в нова работна книга и да използвате SaveAs, вие (а) ще запомните пътя и името на файла на работната книга, (b) Използвайте SaveAs, за да запазите цялата работна книга с номера на фактурата в името, (c ) Изтрийте оригиналната работна книга. (d) Използвайте SaveAs, за да запазите работната книга с оригиналното име.
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
Често задавани въпроси # 6
Трябва да защитя работния лист, така че служителите ми да могат да променят само някои клетки. Когато стартирам вашия макрос, получавам „Клетката, която се опитвате да промените, е защитена и следователно само за четене“
Можете да премахнете защитата на листа в макроса, да напишете новия номер на фактура и след това да защитите листа. Това трябва да се направи само в макроса NextInvoice. Другият макрос не прави промени в нито една клетка. Ето кода, ако използвате защита без парола:
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
ЧЗВ # 7
Не искам да имам бутона Save в записаната работна книга
Това е сложно, защото името на вашата форма ще се промени, когато работният лист се премести в нова работна книга. Много внимателно следвайте тези стъпки:
- Отворете работната книга на макроса за фактури
- Щракнете с десния бутон върху раздела на листа, който съдържа вашата фактура. Изберете Преместване или Копиране.
- В падащото меню To Book: изберете New Book. Поставете отметка в квадратчето за Създаване на копие. Щракнете върху OK. Тази стъпка 3 симулира ActiveSheet.Copy във VBA.
- Сега, когато имате работен лист за фактура в нова работна книга, Ctrl кликнете върху фигурата, която искате да изтриете. Ctrl + Щракнете, за да изберете фигурата, без да стартирате макроса.
- С избраната форма погледнете вляво от лентата с формули. В полето за име ще се покаже име като „Заоблен правоъгълник 1“. Много внимателно изградете нов ред код, за да изтриете тази фигура, както е показано по-долу непосредствено след 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
Отстраняване на неизправности и съобщения за грешки
- Следните функции не могат да бъдат запазени в работни книги без макроси: VB Project. Отговор: Вашият файл в момента се записва като XLSX файл. Също толкова ме дразни, че Microsoft избра да използва счупен тип файл по подразбиране. Използвайте File, SaveAs и променете типа на файла на XLSB или XLSM.
- 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.
- 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"
- 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)
- Грешка във времето на изпълнение 1004. Документът не е запазен. Отговор: Пътят на файла трябва да бъде точен. Точно преди Запазване на файла добавете нов ред с MsgBox NewFN. Изпълнете кода. Ще се появи поле, показващо пътя на файла и името на файла. Уверете се, че между пътя и името на файла има разделител на пътя.
- Грешка във времето на изпълнение "1004". Методът "SaveAs" на обект "_Workbook" не бе успешен. Отговор: FileFormat трябва да бъде FileFormat: = xlOpenXMLWorkbook. Когато го прочетете, той трябва да звучи като „Excel Open XML Workbook“. Това не е Ex One Open XML Workbook. Да, объркващо е, че цифра 1 и малка буква L си приличат във видеото. 1л. Променете вашата X1OPENXMLWORKBOOK на XLOPENXMLWORKBOOK.