Debes mantener ambas numeraciones de forma indpendiente y cuando proceda actualizarlo entregando uniendo ambos valores.
Un ejemplo:
private s_Año as long
private s_Numero as long
public Sub Establecer(byval Año as long, byval Numero as long)
s_Año = x
s_Numero = x
end Sub
public function IncrementarAño as string
s_Año = (s_Año + 1)
IncrementarAño = (cstr(s_Año) & cstr(s_Numero))
end sub
public function IncrementarNumero as string
s_Numero = (s_Numero +1)
IncrementarNumero = (cstr(s_Año) & cstr(s_Numero))
end function
La primera vez usas la función 'Establecer' para pasar los datos iniciales... en lo sucesivo cualquiera de las dos funciones 'Incrementar' (según se precise).
Adicionalmente si precisas que tengan un formato específico, debes utilizar una función que le dé el formato...
Por ejemplo. al caso tu quieres que el número por su parte tenga 3 dígitos...
' Añade ceros a la derecha, de un número.
Private Function FixSizeNum(ByVal Txt As String, ByVal Largo As Byte) As String
If (Len(Txt) < largo) Then
FixSizeNum = (String$(Largo - Len(Txt), "0") & Txt)
Else
FixSizeNum = Left$(Txt, Largo)
End If
End Function
Ahora por tanto, hay que actualizar las funciones 'Incrementar'...
public function IncrementarAño as string
s_Año = (s_Año + 1)
IncrementarAño = (cstr(s_Año) & FixSizeNum(cstr(s_Numero),3))
end sub
public function IncrementarNumero as string
s_Numero = (s_Numero +1)
IncrementarNumero = (cstr(s_Año) & FixSizeNum(cstr(s_Numero),3))
end function
Con un largo de solo 3, llegarás desde 000 hasta 999, luego 2019000 hasta 2019999.
Puesto que el año, lo pasas con 4 dígitos y el primero de ellos no es 0, no precisa tal formato pués seguirán siendo 4 digitos (2019, 2020 tienen 4 dígitos).