Страницы: 1
RSS
Генерация шифра (цифры и буквы)
 
Доброго времени суток!
Необходимо организовать генерацию шифра для паспорта устройства.
Шифр примерно такого содержания - АБВГ.ХХХХХХ.YYY ПС, где:
АБВГ - не меняется
ПС - не меняется
X и Y - числа меняются.
Начальное значение Y  - 001

Необходимо организовать генерацию этого шифра с последующим сохранением в какой-то файл (архив)
Что бы исключить повторения, при каждом создании шифра нужно сверяться с файлом (архив)
Паспортов с одинаковым номером быть не должно.

Подскажите, пожалуйста, в какую строну двигаться?)

С макросами и VBA не сильно дружу, но хочу разобраться.
Изменено: ANGST - 07.12.2022 13:47:28
 
Цитата
написал:
Что бы исключить повторения
идти по порядку
АБВГ.000001.001 ПС
- - - - - - - - - - - - - - - -
АБВГ.999999.001 ПС
АБВГ.000001.002 ПС
Лень двигатель прогресса, доказано!!!
 
ANGST, попробуйте генерацию guid-ключа.

Код
Public Function GetGUID() As String 
    GetGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) 
End Function 
 
Откройте архив. Запустите макрос.
Код
Sub GenerateNumberDialog()
    GenerateNumber InputBox("Введите количество", "Генерация номеров", 1)
End Sub

Sub GenerateNumber(NN As Long)
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim ii As Long
    Dim ss As String
    Dim cl As Range
    For Each cl In ActiveSheet.UsedRange.Cells
        ss = cl.Value
        If cl.Value Like "АБВГ.######.### ПС" Then
            ss = Mid(ss, 6, 6) & Mid(ss, 13, 3)
            ii = ss
            dic.Item(ii) = 0
        End If
    Next
    
    Dim Application_Calculation As Long
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual
    
    Dim jj As Long
    Do
        If jj >= NN Then Exit Do
        ii = ii + 1
        If ii = 1000000000 Then ii = 0
        If Not dic.Exists(ii) Then
            ss = "000000000" & ii
            ss = Right(ss, 9)
            ss = "АБВГ." & Left(ss, 6) & "." & Right(ss, 3) & " ПС"
            With ActiveSheet
                .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1).Value = ss
            End With
            dic.Item(ii) = 0
            jj = jj + 1
        End If
    Loop
    
    Application.Calculation = Application_Calculation
End Sub
Страницы: 1
Наверх