Автогенерация кода VBA для серийного номера на основе значения последней ячейки - PullRequest
1 голос
/ 22 марта 2019

У меня проблема с автогенерацией серийного номера при добавлении последнего значения ячейки в столбце А. Я смог сгенерировать серийный номер до BA00935 (добавив последние значения ячейки BA00934), но не понялпочему Код не генерирует Серийный номер BA00936 , как на этом рисунке .Я даже не получаю сообщения об ошибке.

Как правильно использовать row_number или есть какая-либо альтернатива для достижения ожидаемых результатов?

Я использовал следующий код VBA для генерации последовательного порта.добавив к последней строке число.

Private Sub cmdadd_Click()
On Error Resume Next
ActiveSheet.Unprotect
Dim LastRow As Long
'for giving the serial number based on last cell value by adding plus one
With ActiveSheet
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Range("A" & LastRow).Select
    Selection.AutoFill Destination:=Range("A" & LastRow & ":A" & LastRow + 1), Type:=xlFillDefault
    Range("A" & LastRow + 1).Select
End With

Pattern_Serial nos

1 Ответ

1 голос
/ 22 марта 2019

При условии, что строки всегда имеют длину 7 символов и заканчиваются 5-значными числами

Private Sub cmdadd_Click()
On Error Resume Next 'This line skips errors... bad practice unless you really know what you are doing
On Error GoTo 0
Dim LastRow As Long

With Workbooks(REF).Sheets(REF) 'Always refer to the wb/ws, otherwise VBA will refer to the active wb/ws

    .Unprotect

    'for giving the serial number based on last cell value by adding plus one
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    prfx = Left(.Cells(LastRow, "A"),2) 'Gets the prefix by getting the 2 leftmost characters of the last filled cell
    nmbr = Right(.Cells(LastRow, "A"),5)+1 'Gets the last 5 characters, which is the number

    'Numbers don't have leading zeroes, so if the string did they have been stripped
    'This determines if that happened and if so, it adds as many leading zeroes as the number of characters is shorter than 5
    If Len(nmbr) < 5 Then 
        For i = 1 To (5 - Len(nmbr))
            nmbr = "0" & nmbr
        Next i
    End If
    .Cells(LastRow + 1, "A").Value = prfx & nmbr
End With
End Sub
...