فعلاً هذه الدالة كانت من أحد مشاريعي ، وتعرفت عليها مسبقاً ولكني شككت في نفسي هل فعلاً قمت بمشاركته أم لا سابقاً 😅 ..
على العموم ، الحل الذي أفكر به أن أجعل الدالة ترجع String بدل Long للمتغير maxID . بمعنى أنه لا تقوم بتحويل الرقم التسلسلي الناتج إلى CLng بعد دمج النصوص (مكونات الرقم التسلسلي ) ، بل احتفظ به كنص .
وعليه فبعد التعديل وإزالة التنسيق يصبح الكود كالتالي :-
Public Function GenerateID(TableName As String, fieldName As String) As String
Dim currentYear As Integer
Dim yearPrefix As String
Dim maxID As String
Dim serialPart As Long
currentYear = Year(Date)
yearPrefix = currentYear & ""
maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00")
serialPart = CLng(Mid(maxID, Len(yearPrefix) + 1))
GenerateID = yearPrefix & "0000" & (serialPart + 1)
End Function
جربه وأخبرنا بالنتيجة