Непосредственно перед созданием вашего увеличенного номера счета-фактуры просто проверьте, существует ли счет-фактура 1 текущего года 001/2021
в ваших счетах. Например, используя метод WorksheetFunction.Match .
Если этот номер счета-фактуры существует, то счетчик счета-фактуры уже находится в текущем году, если он не существует, нам нужно сбросить счетчик на 0, так как в текущем году счет еще не был написан.
Dim FirstInvoice As String
FirstInvoice = "001" & "/" & current_year
Dim MatchInvoice As Double
On Error Resume Next 'next line will error if invoice 001/2021 does not exist yet
MatchInvoice = Applicarion.WorksheetFunction.Match(FirstInvoice, RangeOfInvoceNumbers, 0)
On Error Goto 0 're-enable error reporting
If MatchInvoice = 0 Then
'first invoice of the current year does not exist so
'reset your invoice counter to 0 here
End If
'proceed generating your increment as you did before.
Это не будет сбрасывать счетчик напрямую в 1 января, но всякий раз, когда первый счет выставляется в новом году. Так что это даже работает, если вы напишите свой первый счет в июне, например.
Немного не в топи c:
Обратите внимание, что при использовании этого формата 001/2021
будет сортироваться следующим образом :
001/2020
001/2021
001/2022
002/2020
002/2022
002/2023
Таким образом, вы можете рассмотреть лучший формат, такой как:
2020/001
2020/002
2021/001
2021/002
2022/001
2022/002
, который будет автоматически сортировать по году.
Если вы сохраните фактический номер счета, сохраненный в цифрах c как 2020001
и просто используйте числовой формат 0000"/"000
, чтобы показать его как 2020/001
для лучшей читаемости человеком, вы даже можете использовать функцию MAX
, чтобы найти последний номер счета в ваших счетах и увеличить его на вычисление +1
.
Тогда вы также можете использовать Application.WorksheetFunction.Max
, чтобы проверить, нужно ли вам более легко сбрасывать и увеличивать
Dim FirstInvoiceCurrentYear As Long
FirstInvoiceCurrentYear = cLng(current_year & "001")
Dim CurrentInvoice As Long
CurrentInvoice = Application.WorksheetFunction.Max(RangeOfInvoceNumbers)
Dim NextInvoiceNumber As Long
If FirstInvoiceCurrentYear > CurrentInvoice Then
NextInvoiceNumber = FirstInvoiceCurrentYear
Else
NextInvoiceNumber = CurrentInvoice + 1
End If
Таким образом, вы видите, что выбор лучшего формата делает вашу жизнь намного в некоторых пунктах проще.
Вам просто нужно убедиться, что любая ячейка, содержащая номер счета, установлена в числовой формат 0000"/"000
, если вы затем введете 2020001
в эту ячейку, она автоматически будет отображаться как 2020/001
, но т ячейка - это все еще число, которое вы можете вычислить.