Если предположить, что ссылочные номера записаны в столбец B вкладки 2- V1 Загрузка (2) , то следующим номером всегда должен быть номер, найденный внизу столбца + 1. Если есть для этой даты нет номера, чем новый порядковый номер должен быть 1. Код ниже реализует этот метод
Function NextRef() As String
' 016
Dim Fun As String
Dim Counter As Integer
Dim Rng As Range
Dim Fnd As Range
Dim Sp() As String
Fun = Format(Date, """V1.""yy.mm.dd")
With ThisWorkbook.Worksheets("2- V1 Loading (2)")
' start in row 2 (row 1 holding column captions)
Set Rng = .Range(.Cells(2, "B"), .Cells(.Rows.Count, "B").End(xlUp))
End With
If Rng.Row > 1 Then ' skip, if the column is empty
' finds the first occurrence of Ref from the bottom
Set Fnd = Rng.Find(What:=Fun, _
After:=Rng.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchDirection:=xlPrevious)
If Not Fnd Is Nothing Then
Sp = Split(Fnd.Value, "-")
If UBound(Sp) Then Counter = Val(Sp(1))
End If
End If
NextRef = Fun & -(Counter + 1)
End Function
Вы можете использовать функцию просто как ComboBox1.Value = NextRef
. Однако когда и как вызывать эту строку кода, немного неясно в опубликованном вами проекте. В частности, непонятно, зачем вам это вообще нужно в ComboBox, учитывая, что поле может также содержать другую информацию. Ваша идея использовать событие Change может работать не так, как задумано, поскольку это событие происходит с каждой буквой, которую вводит пользователь. Я проверил это: -
Private Sub ComboBox1_GotFocus()
' 016
With ComboBox1
If .Value = "" Then .Value = NextRef
End With
End Sub
Следующий ссылочный номер вставляется, как только вы нажимаете на ComboBox. Это работает, но это не имеет смысла. Я думаю, теперь, когда у вас есть функция, которая выполняет работу, вы найдете способ ее развертывания. Удачи.