سلام عليكم
هل يمكن عمل ترقيم تلقائي يبدا بحرف a من 1 الى 99
ثم حرف b من 1 الى 99
ثم حرف c من 1 الى 99
وشكرا لكم
سلام عليكم
هل يمكن عمل ترقيم تلقائي يبدا بحرف a من 1 الى 99
ثم حرف b من 1 الى 99
ثم حرف c من 1 الى 99
وشكرا لكم
يمكنك استخدام هذه الدالة
ضع الدالة فى وحدة نمطية أو فى النموذج
Public Function Get_serial_number(tablename As String, serial_fldname As String) As String
Dim idval As Integer, stralpa As String
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT Left(" & serial_fldname & ",1) AS alpa, Right(" & serial_fldname & _
",Len(" & serial_fldname & ")-1) AS Numval, " & tablename & "." & serial_fldname & " FROM " & tablename & _
" ORDER BY Left(" & serial_fldname & ",1), Right(" & serial_fldname & ",Len(" & serial_fldname & ")-1);")
If rs.RecordCount > 0 Then
rs.MoveLast
idval = IIf(rs!numval = 99, 1, rs!numval + 1)
Select Case rs!alpa
Case Is = "A"
If rs!numval = 99 Then stralpa = "B" Else stralpa = "A"
Case Is = "B"
If rs!numval = 99 Then stralpa = "C" Else stralpa = "B"
Case Is = "C"
If rs!numval = 99 Then stralpa = "D" Else stralpa = "C"
End Select
Else
idval = 1
stralpa = "A"
End If
Get_serial_number = IIf(stralpa & idval = "D1", "C99", stralpa & idval)
rs.Close
Set rs = Nothing
End Functionو للتطبيق
ضع هذا الكود لاستدعاء الدالة فى القيمة الافتراضية لمربع النص فى النموذج
=Get_serial_number("tab";"serial")حيث tab هو اسم الجدول
و serial هو اسم حقل الترقيم بالجدول ( ملحوظة يجب ان يكون نوع البيانات فى هذا الحقل نص )
تم تعديل هذه المشاركة بواسطة Abo_Yossof في 26 مايو 2011 في 02:00
السلام عليكم
أقترح عليكم استخدام قيم ASCII بدل من الحروف للحصول على قيمة رقمية كاملة للمحافظة على نسق التسلسل، فإذا ما تم أخذ القيمة الجديدة نعيد قيم ASCII الى القيم الحرفية
إليكم هذا المثال ويحتوي على اسلوبين .... AlphaNumricSqn.zip
-- الأسلوب الأول
--- قمت بعمل جدول يعتمد على الترقيم التلقائي، وجعلته يبدأ من الرقم 6501 .. طبعا الرقم 65 في ASCII هو المقابل للحرف A في البجدية.
--- قمت بقلب هذه القيمة إلى الأبجدية باستخدام الدالة CHR لتعطي الحرف المقابل وهو هنا A ..
--- جربوا إدخال البيانات عن طريق الجدول1 وعن طريق الاستعلام لتلاحظوا الفرق.
--- طبعا يمكن ضبط بداية التعداد ونهايته عن طرق الفحص؛ ومن ثم إعادة استخدام النمط... لكن يتوجب ترحيل البيانات عند نهاية كل تعداد.
-- الأسلوب الثاني
--- هذا الأسلوب يعتمد على شفرة تؤدي نفس الغرض لكن بعد تحوبل البيانات إلى قيمة نصية ترسلها كقيمة افتراضية في النوذج
--- في هذه الشفرة تم ضبط بداية ونهاية التعداد.
--- في هذه الشفرة تم استبعاد القيمة التي تبدأ باصفار مثل A00 B00 C00 .. وهكذا
أتمنى ان يحوز هذا العمل على استحسانكم
الاخ ابو يوسف جزاك الله خير
حل موفق
ولكن الترقيم يقف عند a10 ويبدا بالتكرار
فهل من تعدب
القحم كتب:السلام عليكم
أقترح عليكم استخدام قيم ASCII بدل من الحروف للحصول على قيمة رقمية كاملة للمحافظة على نسق التسلسل، فإذا ما تم أخذ القيمة الجديدة نعيد قيم ASCII الى القيم الحرفية
إليكم هذا المثال ويحتوي على اسلوبين .... AlphaNumricSqn.zip
-- الأسلوب الأول
--- قمت بعمل جدول يعتمد على الترقيم التلقائي، وجعلته يبدأ من الرقم 6501 .. طبعا الرقم 65 في ASCII هو المقابل للحرف A في البجدية.
--- قمت بقلب هذه القيمة إلى الأبجدية باستخدام الدالة CHR لتعطي الحرف المقابل وهو هنا A ..
--- جربوا إدخال البيانات عن طريق الجدول1 وعن طريق الاستعلام لتلاحظوا الفرق.
--- طبعا يمكن ضبط بداية التعداد ونهايته عن طرق الفحص؛ ومن ثم إعادة استخدام النمط... لكن يتوجب ترحيل البيانات عند نهاية كل تعداد.
-- الأسلوب الثاني
--- هذا الأسلوب يعتمد على شفرة تؤدي نفس الغرض لكن بعد تحوبل البيانات إلى قيمة نصية ترسلها كقيمة افتراضية في النوذج
--- في هذه الشفرة تم ضبط بداية ونهاية التعداد.
--- في هذه الشفرة تم استبعاد القيمة التي تبدأ باصفار مثل A00 B00 C00 .. وهكذا
أتمنى ان يحوز هذا العمل على استحسانكم
الاخ الفاضل القحم
جزاك الله خير
بس للاسف لم يعمل معي الملف
بمجرد فتح النموذج تظهر الصورة التالية بالمرفق
sabic7 كتب:الاخ ابو يوسف جزاك الله خير
حل موفق
ولكن الترقيم يقف عند a10 ويبدا بالتكرار
فهل من تعدب
ملاحظتك صحيحة أخى
اذا كنت تريد ان يكون الترقيم على النحو A1 A2 A3 ..........A9 A10
استبدل هذا الجزء فى الدالة
Set rs = CurrentDb.OpenRecordset("SELECT Left(" & serial_fldname & ",1) AS alpa, Right(" & serial_fldname & _
",Len(" & serial_fldname & ")-1) AS Numval, " & tablename & "." & serial_fldname & " FROM " & tablename & _
" ORDER BY Left(" & serial_fldname & ",1), Right(" & serial_fldname & ",Len(" & serial_fldname & ")-1);")بهذا
Set rs = CurrentDb.OpenRecordset("SELECT Left(" & serial_fldname & ",1) AS alpa, VAL(Right(" & serial_fldname & _
",Len(" & serial_fldname & ")-1)) AS Numval, " & tablename & "." & serial_fldname & " FROM " & tablename & _
" ORDER BY Left(" & serial_fldname & ",1), VAL(Right(" & serial_fldname & ",Len(" & serial_fldname & ")-1));")اما اذا كنت تريد ان يكون الترقيم على النحو A01 A02 A03 ..........A09 A10
فالامر سيكون أسهل و لن نحتاج الى تكوين مجموعة السجلات
و يمكن للدالة ان تكون على النحو التالى
Public Function Get_serial_number(tablename As String, serial_fldname As String) As String Dim idval As String, stralpa As String idval = Nz(DMax(serial_fldname, tablename)) If idval <> "" Then idval = Right(idval, 2) Select Case Left(DMax(serial_fldname, tablename), 1) Case Is = "A" If idval = 99 Then stralpa = "B" Else stralpa = "A" Case Is = "B" If idval = 99 Then stralpa = "C" Else stralpa = "B" Case Is = "C" If idval = 99 Then stralpa = "D" Else stralpa = "C" End Select idval = IIf(idval = 99, "01", Val(Right(idval, 2)) + 1) Else idval = "01" stralpa = "A" End If Get_serial_number = stralpa & IIf(Len(idval) = 1, "0" & idval, idval) Get_serial_number = IIf(Get_serial_number = "D01", "C99", Get_serial_number) End Function
بالنسبة لمرفق الاخ القحم
فالمشكلة ان هناك مرجع مفقود ادخل الى قائمة المراجع و الغى اختيار هذا المرجع
تم تعديل هذه المشاركة بواسطة Abo_Yossof في 27 مايو 2011 في 02:44
القحم كتب:السلام عليكم
أقترح عليكم استخدام قيم ASCII بدل من الحروف للحصول على قيمة رقمية كاملة للمحافظة على نسق التسلسل، فإذا ما تم أخذ القيمة الجديدة نعيد قيم ASCII الى القيم الحرفية
إليكم هذا المثال ويحتوي على اسلوبين .... AlphaNumricSqn.zip
-- الأسلوب الأول
--- قمت بعمل جدول يعتمد على الترقيم التلقائي، وجعلته يبدأ من الرقم 6501 .. طبعا الرقم 65 في ASCII هو المقابل للحرف A في البجدية.
--- قمت بقلب هذه القيمة إلى الأبجدية باستخدام الدالة CHR لتعطي الحرف المقابل وهو هنا A ..
--- جربوا إدخال البيانات عن طريق الجدول1 وعن طريق الاستعلام لتلاحظوا الفرق.
--- طبعا يمكن ضبط بداية التعداد ونهايته عن طرق الفحص؛ ومن ثم إعادة استخدام النمط... لكن يتوجب ترحيل البيانات عند نهاية كل تعداد.
-- الأسلوب الثاني
--- هذا الأسلوب يعتمد على شفرة تؤدي نفس الغرض لكن بعد تحوبل البيانات إلى قيمة نصية ترسلها كقيمة افتراضية في النوذج
--- في هذه الشفرة تم ضبط بداية ونهاية التعداد.
--- في هذه الشفرة تم استبعاد القيمة التي تبدأ باصفار مثل A00 B00 C00 .. وهكذا
أتمنى ان يحوز هذا العمل على استحسانكم
فكرة جيدة أخى
و لكن انت تفحص الرقم الاخير فقط اذا كان يساوى 9 يضيف رقمين هذا سيؤدى الى اخطاء فى الارقام 19 29 39 و هكذا
اعتقد انك يجب ان تفحص اخر رقمين حتى تكون النتيجة دقيقة
sabic7 كتب:الاخ الفاضل القحم
جزاك الله خير
بس للاسف لم يعمل معي الملف
بمجرد فتح النموذج تظهر الصورة التالية بالمرفق
أرجو أن يكون الأستاذ أبو يوسف قد حل المشكلة
Abo_Yossof كتب:فكرة جيدة أخى
و لكن انت تفحص الرقم الاخير فقط اذا كان يساوى 9 يضيف رقمين هذا سيؤدى الى اخطاء فى الارقام 19 29 39 و هكذا
اعتقد انك يجب ان تفحص اخر رقمين حتى تكون النتيجة دقيقة
شكرا لك أستاذي على هذه الملاحظة... وهذا هو المرفق بعد التعديل
الاخ Abo_Yossof
الاخ القحم
جزاك الله كل خير ورفع قدرك وزادك علما وحفظك الله من كل مكروه
تم تعديل هذه المشاركة بواسطة sabic7 في 27 مايو 2011 في 13:00
الاخ العزيز اليك شيت اكسيل به عدة دوال row index match &
بعد متخلص يمكنك استخدام الترتيب وحذف المتكرر للحصول على قائمة جيدة
او ارسلى ميل على mzagange2000@yahoo.com