Forum Discussion
How to create a alphanumeric sequence on vba
- Dec 27, 2022
New version:
Function nextUDI(prevUDI As String) As String 'Gera UDI com base no número anterior Dim prefixo As String Dim n As Long Dim prevVal As Long Const strAlphabet = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ" n = Len(prevUDI) prevVal = 34 * (InStr(strAlphabet, Mid(prevUDI, n - 1, 1)) - 1) + InStr(strAlphabet, Right(prevUDI, 1)) - 1 prefixo = Left(prevUDI, n - 2) nextUDI = prefixo & fBase34(prevVal + 1) End Function
Function nextUDI(prevUDI As String) As String
'Gera UDI com base no número anterior
Dim prefixo As String
Dim prevVal As Long
prevVal = Application.Decimal(Right(prevUDI, 2), 34)
prefixo = Left(prevUDI, Len(prevUDI) - 2)
nextUDI = prefixo & fBase34(prevVal + 1)
End FunctionI use your vba code and it works fine but when the code is 3J, it jumps to 3L (i think that it is because i don't use the leter I), the 3N jumps to 3Q (I think that it is because i don't use O as well) and 3Z doesn't goes to 40... could you help me please. The vba code that i'm using is:
Sub removeAllDatamatrix()
For Each symbolShape In ActiveSheet.Shapes
If Left(symbolShape.Name, 1) = "5" Then
symbolShape.Delete
End If
Next symbolShape
End Sub
Function fBase34(ByRef lngNumToConvert As Long) As String
'Converte base 10 para 34 (base 36 sem I e O)
Dim strAlphabet As String
strAlphabet = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"
If lngNumToConvert = 0 Then
Base34Encode = "0"
Exit Function
End If
fBase36Encode = vbNullString
Do While lngNumToConvert <> 0
fBase34 = Mid(strAlphabet, lngNumToConvert Mod 34 + 1, 1) & fBase34
lngNumToConvert = lngNumToConvert \ 34
Loop
If Len(fBase34) = 1 Then
fBase34 = "0" + fBase34
End If
End Function
Function ConvertBase34To10(Base34Number As String) As Long
Dim X As Long, Total As Long, Digit As String
For X = Len(Base34Number) To 1 Step -1
Digit = UCase(Mid(Base34Number, X, 1))
ConvertBase34To10 = ConvertBase34To10 + IIf(IsNumeric(Digit), Digit, Asc(Digit) - 55) * 34 ^ (Len(Base34Number) - X)
Next
End Function
Function genUDI(ByRef decNum As Long, prefixo As String) As String
'Gera UDI com base em um numero decimal
genUDI = prefixo & fBase34(decNum)
End Function
Function nextUDI(prevUDI As String) As String
'Gera UDI com base no número anterior
Dim prefixo As String
Dim prevVal As Long
prevVal = Application.Decimal(Right(prevUDI, 2), 34)
prefixo = Left(prevUDI, Len(prevUDI) - 2)
nextUDI = prefixo & fBase34(prevVal + 1)
End Function