Номер следующего счета - Новости

Microsoft Excel предлагает множество шаблонов счетов, которые вы можете скачать. Но нет встроенного способа увеличения до следующего номера счета-фактуры.

Я записал это видео, показывающее, как добавить несколько строк кода VBA в вашу книгу, чтобы вы могли сохранять каждый счет как новый файл. Затем макрос очищает счет-фактуру и добавляет 1 к номеру счета-фактуры.

С 166 тысячами просмотров и сотнями комментариев я обнаружил, что одни и те же вопросы возникают снова и снова. Стало непрактичным просить людей прочитать 800 комментариев, потому что ответ на их вопрос публиковался шесть раз раньше. Итак - для популярных вопросов я размещаю код здесь.

FAQ # 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

FAQ # 2

Я хочу сохранить счет-фактуру в формате PDF на ПК с Windows

Заметка

Этот код работает только в версиях Excel 2010 для Windows или новее. Для Mac есть другой код.

Вы должны выбрать диапазон, содержащий счет-фактуру, и выполнить макет страницы, область печати, задать область печати. Если вы пропустите этот шаг, то кнопки, используемые для запуска макроса, появятся в вашем счете!

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

Я хочу сохранить счет как файл 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

FAQ # 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)

FAQ # 5

У меня есть другие макросы в книге (например, SpellNumber), и мне также нужно сохранить макросы.

Чтобы позволить другим вашим макросам работать, чтобы функция «Числа в слова» продолжала работать, стратегия немного отличается. Вместо того, чтобы копировать только лист счета-фактуры в новую книгу и использовать SaveAs, вы (a) запомните путь и имя файла книги, (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

FAQ # 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

FAQ # 7

Я не хочу, чтобы в сохраненной книге была кнопка "Сохранить"

Это сложно, потому что имя вашей фигуры изменится, когда рабочий лист переместится в новую книгу. Очень внимательно выполните следующие действия:

  1. Откройте книгу макросов счетов
  2. Щелкните правой кнопкой мыши вкладку листа, содержащую ваш счет. Выберите «Переместить» или «Копировать».
  3. В раскрывающемся списке «В книгу» выберите «Новая книга». Установите флажок «Создать копию». Щелкните ОК. На этом шаге 3 имитируется ActiveSheet.Copy в VBA.
  4. Теперь, когда у вас есть лист счета-фактуры в новой книге, нажмите, удерживая клавишу Ctrl, фигуру, которую вы хотите удалить. Ctrl + Click выберет фигуру без запуска макроса.
  5. Выделив фигуру, посмотрите налево от панели формул. В поле имени отобразится имя, например «Прямоугольник со скругленными углами 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

Устранение неполадок и сообщения об ошибках

  1. Следующие функции не могут быть сохранены в книгах без макросов: VB Project. Ответ: Ваш файл в настоящее время сохранен как файл XLSX. Меня в равной степени раздражает то, что Microsoft решила использовать по умолчанию неработающий тип файла. Используйте File, SaveAs и измените тип файла на XLSB или 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. Ошибка выполнения 1004. Документ не сохранен. Ответ: Путь к файлу должен быть точным. Непосредственно перед сохранением файла добавьте новую строку с MsgBox NewFN. Запустите код. Появится окно с указанием пути к файлу и имени файла. Убедитесь, что между путем и именем файла есть разделитель.
  6. Ошибка времени выполнения «1004». Ошибка метода SaveAs объекта _Workbook. Ответ: FileFormat должен быть FileFormat: = xlOpenXMLWorkbook. Когда вы ее прочтете, она должна звучать как «Книга Excel Open XML». Это не Ex One Open XML Workbook. Да, сбивает с толку то, что цифра 1 и строчная L на видео выглядят одинаково. 1л. Измените свой X1OPENXMLWORKBOOK на XLOPENXMLWORKBOOK.

Интересные статьи...