Автоматическое создание номера счета на основе номера счета в последней строке - PullRequest
0 голосов
/ 18 июня 2020

Итак, у меня есть пользовательская форма и файл базы данных, формат номеров счетов (которые действуют как уникальные серийные номера) в базе данных выглядит как 001/2020, 002/2020, 003/2020 и так далее. С помощью Userform_Initialize я автоматически заполняю поле счета в своей пользовательской форме. Таким образом, если последний счет - 008/2020, счет в форме будет отображаться как 009/2020.

Код для этого:

Me.txtInvoice.Value = Format(Int(Left(lastInvoice, 3)) + 1, "000") & "/" & current_year

, где lastInvoice - это номер счета в последняя использованная строка в базе данных, а current_year - это переменная, в которой хранится текущий год, и это работает нормально.

Проблема в том, что иногда пользователям нужно изменить номера счетов на формат xxx-A / 2020, xxx-B / 2020 и так далее. xxx может быть любым числом, которое создается автоматически. Поэтому, когда они добавляют A, B, C, мой код перестает правильно рассчитывать номер счета. Также им не нужно каждый раз добавлять A, B, C. Итак, в базе данных это может быть xxx / год или xxx-A / год и т. Д.

Я хочу игнорировать xxx-A / 2020, xxx-B / 2020 и добавить единицу к последнему номеру счета-фактуры, который не было A / B / C

Пожалуйста, помогите

Изменить: Код инициализации пользовательской формы:

Private Sub UserForm_Initialize()
    Call Reset
    Call Reset2
    Call Reset3
    Call Reset4
    Application.ScreenUpdating = False
    Dim current_year As String

    current_year = FinancialYear(Date)

    Dim nwb As Workbook
    Dim lastInvoice As String

    Set nwb = Workbooks.Open("C:\Users\username\Downloads\TestDB.xlsx")
    lastRow = WorksheetFunction.CountA(nwb.Sheets("Sheet1").Range("A:A"))
    lastInvoice = nwb.Sheets("Sheet1").Cells(lastRow, 2)
    Me.txtInvoice.Value = Format(Int(Left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    Me.shipInvoice.Value = Format(Int(Left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    Me.tbInvoice.Value = Format(Int(Left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    'Format(Int(Left(.Cells(emptyRow - 1, 2).Value, 3)) + 1, "000") & "/" & current_year
    nwb.Save
    nwb.Close
End sub

1 Ответ

1 голос
/ 18 июня 2020

Протестируйте следующую адаптацию, пожалуйста:

Private Sub UserForm_Initialize()
   'your existing code...
   '......
    '......
    LastRow = nwb.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).row
    lastInvoice = nwb.Sheets("Sheet1").Cells(LastRow, 2).Value

    'to be added:
    If Len(lastInvoice) > 8 Then
        For i = LastRow To 1 Step -1
            If Len(nwb.Sheets("Sheet1").Cells(1, 2).Value) = 8 Then
                lastInvoice = nwb.Sheets("Sheet1").Cells(i, 2).Value
            End If
        Next i
    End If
    'your usual code follows:
    Me.txtInvoice.Value = Format(Int(left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    Me.shipInvoice.Value = Format(Int(left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    Me.tbInvoice.Value = Format(Int(left(lastInvoice, 3)) + 1, "000") & "/" & current_year
    '...............

End Sub

Код произведет поиск соответствующего типа номера счета и выберет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...