المشكلة واضحة تمامًا: الخطأ "Overflow" يحدث لأن الرقم 2025000100 يتجاوز الحد الأقصى لنوع البيانات Long في VBA، والذي هو:
(Long∈[−2,147,483,648 إلى 2,147,483,647])
لكن الرقم الذي تحاول توليده هو عشرة أرقام، أي يتجاوز هذا الحد.
✅ الحل المقترح: استخدام Double بدلًا من Long
غير نوع الإرجاع والمتغيرات من Long إلى Double لتسمح بالأرقام الأكبر:
Public Function GenerateID(TableName As String, fieldName As String) As Double
Dim currentYear As Integer
Dim yearPrefix As String
Dim maxID As Double
Dim serialPart As Long
currentYear = Year(Date)
yearPrefix = CStr(currentYear)
maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00")
serialPart = CLng(Mid(CStr(maxID), Len(yearPrefix) + 1))
GenerateID = CDbl(yearPrefix & Format(serialPart + 1, "0000"))
End Function
✨ ملاحظات إضافية:
استخدمت Format(..., "0000") لضمان أن الجزء التسلسلي يبقى دائمًا بأربعة أرقام.
تأكد أن الحقل في الجدول (fieldName) من نوع Double أو Text وليس Long.
إذا كنت تستخدم هذا الرقم كمفتاح أساسي (Primary Key)، ففكر في استخدام Text بدلًا من رقم لتجنب مشاكل مستقبلية.
هل تحب أن نضيف تحققًا إضافيًا لتفادي التكرار أو نربط هذا التوليد بحدث معين في النموذج؟