Как закодировать буквенно-цифровой c серийный номер в Excel VBA (от USABC001 до USABC002) - PullRequest
0 голосов
/ 13 июля 2020

Недавно я начал писать код для проекта в Excel VBA. У меня очень мало знаний о кодировании, и я надеялся, что кто-нибудь сможет мне помочь. У меня есть проект, в котором мне нужно сгенерировать буквенно-цифровые c серийные номера на основе входных данных в UserForm. Однако я не могу этого сделать.

Входные данные в пользовательской форме включают страну и имя клиента, которые потребуются для генерации серийного номера. (Например, страна - США, имя клиента - AB C, поэтому мой серийный номер должен быть USABC001). Последующие записи с той же страной и именем клиента должны создаваться как USABC002 и так далее. Если есть новая запись, нумерация должна начинаться с 001. (например, страна - Австралия, имя клиента - BCD, серийный номер = AUSBCD001).

Я надеюсь, что кто-то сможет помочь и увеличить мой VBA знания тоже. Спасибо.

Это код, который я пробовал, но он не работает.

  Sub FindCustomerID()
Dim lastrow
Dim lastnum As Long
Dim ws As Worksheet
Set ws = Worksheets("Customer Data")

If Me.cboCountry = "" Or Me.txtCustomerName = "" Then
    Exit Sub
End If

c = 1

lastrow = ws.Cells(Rows.count, 1).End(xlUp).Row

For currentrow = 2 To lastrow
    If CustomerID = Cells(currentrow, 1) Then
        'find last number that applies
        c = c + 1
    End If
Next currentrow

a = Left(Me.cboCountry, 3)
b = Left(Me.txtCustomerName, 10)

CustomerID = UCase(a & b & c)

Me.lblCustomerID = CustomerID

End Sub

1 Ответ

0 голосов
/ 13 июля 2020

Присвоение CustomerID должно предшествовать вашему l oop, иначе у него не будет значения для сравнения. Поднятие присвоения CustomerID перед for-l oop будет иметь значение.

'... your code from the top, down to lastrow = ...

'assign country and customer code
a = UCase(Left(Me.cboCountry, 3))
b = UCase(Left(Me.txtCustomerName, 10))

'there is no sense in using UCase to serial number
'save the process time of implicit casting from number to string.

'assemble them into CustomerID
CustomerID = a & b & c

For currentrow = 2 To lastrow
    If CustomerID = Cells(currentrow, 1) Then
        'find last number that applies
        c = c + 1
    End If
Next currentrow

're-assign the CustomerID with new serial number
CustomerID = a & b & c

Me.lblCustomerID = CustomerID

В целях здравого смысла вы можете использовать самодокументированное имя переменной, например «countryCode» вместо «a», «customerCode». "вместо" b "и" серийный номер "вместо" c ". Так что когда вы вернетесь к своему коду через некоторое время, его будет легче читать и поддерживать.

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