اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

طريقة تجميع العمر من 3 فيلدات الى فيلد واحد


safaa salem5
إذهب إلى أفضل إجابة Solved by عمر ضاحى,

الردود الموصى بها

عندى 3 فيلدات

Y

M

D

ترمز لسنه وشهر ويوم

 عايزه  اجمعم فى فيلد واحد اسمه 

age

كالاتى

فى حاله وجود السن بالايام فقط

او بالشهور فقط

او بالسنين فقط

يبقى 

Age= D                ageunit=Dayes 

Age= M                ageunit=Months 

Age= Y                  ageunit=Years

على الترتيب

فى حاله السن بالشهور والايام

فى الحاله دى

Age= M                ageunit=Months 

 نتغاضى عن الايام  

 

 اما فى حالة 

السن بالسنين والشهور

مثلا شخص عنده 42 سنه و9شهور

عايزاهم يتجمعو زى كدا

42.9

بمجرد ما يكون السن 42 سنه و10 شهور يتم تقريب السن ل 43 سنه
ageunit=Years

age collect.rar

رابط هذا التعليق
شارك

1 hour ago, محمد احمد لطفى said:

دى محاولة قد تكون صحيحة و قد تكون خاطئة حسب فهمى للسؤال 

مع تغيير حقل age  لنص و ليس رقمى

 

age collect.rar 589.43 kB · 0 downloads

دا جزأ من المطلوب

انا حاولت اكمل بنفس طريقتك

 

 

 


Private Sub Form_Current()
If Me.Y > 0 And Me.M = 0 And Me.D = 0 Then
Me.age = Me.Y
Me.ageunit = years
Else
If Me.Y = 0 And Me.M > 0 And Me.D >= 0 Then
Me.age = Me.M
Me.ageunit = Months
Else
If Me.Y = 0 And Me.M = 0 And Me.D > 0 Then
Me.age = Me.D
Me.ageunit = DAYS
Else


    If Me.M >= 10 Then
        Me.age = Me.Y + 1
        Me.ageunit = years
    Else
        Me.age = Me.Y & "." & Me.M
    
         Me.ageunit = years
         End If
         End If
         End If
         End If
End Sub

تم تعديل بواسطه safaa salem5
  • Like 1
رابط هذا التعليق
شارك

54 minutes ago, safaa salem5 said:

 

عندى مشكلتين لما بيكون فى ايام لوحدها مش بتنزل

ظهور النقطه جمب السن فى غير وقتها

ageunitمش بتنزل

اللى هى وحدة السن ايام شهور سنه

00011.gif

age collect.rar

تم تعديل بواسطه safaa salem5
رابط هذا التعليق
شارك

39 دقائق مضت, safaa salem5 said:

عندى مشكلتين لما بيكون فى ايام لوحدها مش بتنزل

ظهور النقطه جمب السن فى غير وقتها

ageunitمش بتنزل

اللى هى وحدة السن ايام شهور سنه

00011.gif

age collect.rar 641.43 kB · 1 download

 

احذفى ال . من الكود 

Me.age = Me.Y & "." & Me.M
الى
Me.age = Me.Y & " " & Me.M

رابط هذا التعليق
شارك

 


 

 

9 minutes ago, عمر ضاحى said:

 

احذفى ال . من الكود 

Me.age = Me.Y & "." & Me.M
الى
Me.age = Me.Y & " " & Me.M

انا عايزه التجميعه دى 

 

مثلا شخص عنده 42 سنه و9شهور

عايزاهم يتجمعو زى كدا

42.9

بمجرد ما يكون السن 42 سنه و10 شهور يتم تقريب السن ل 43 سنه

تم تعديل بواسطه safaa salem5
رابط هذا التعليق
شارك

  • أفضل إجابة

هل هذا ما تريدين 

8gxp8rg.gif

age collect.rar

انا وضعت تقريبا جميع الاحتمالات التى جربتها 

قد يكون هناك احتمالين او 3 لسه ما فكرت فيهم 

لكن خليهم عند التجربه 

انا لغيت الاكواد التى وضعتيها ووضعت ليكي مديول وصب 

  • Like 1
رابط هذا التعليق
شارك

3 hours ago, عمر ضاحى said:

هل هذا ما تريدين 

8gxp8rg.gif

age collect.rar 582.18 kB · 4 downloads

انا وضعت تقريبا جميع الاحتمالات التى جربتها 

قد يكون هناك احتمالين او 3 لسه ما فكرت فيهم 

لكن خليهم عند التجربه 

انا لغيت الاكواد التى وضعتيها ووضعت ليكي مديول وصب 

تمام كدا بس انا عامله الكود الخاص بتحويل تاريخ الميلاد ل ايام وشهور وسنه

انا عايزه بس الجزئيه اللى انا بتكلم فيها 

كدا اشيل ايه من الكود

 

رابط هذا التعليق
شارك

4 دقائق مضت, safaa salem5 said:

تمام كدا بس انا عامله الكود الخاص بتحويل تاريخ الميلاد ل ايام وشهور وسنه

انا عايزه بس الجزئيه اللى انا بتكلم فيها 

كدا اشيل ايه من الكود

 

الكود ال انا لاغيه محوله لتعليق 
راجعي الاكواد 

rx6HPsA.png

 

 

غير اني كنت ملاحظ ان الموضوع ادخال يدوي صحيح ؟

 

عموما انا شايف كده افضل (مجرد راي طبعا والامر كله اليكي تختاري ما تفضلينه حسب حاجتك)

اذا حابه تعديله يمكن ان الغيه لكي اذا حبيتي 

 

 

رابط هذا التعليق
شارك

23 minutes ago, عمر ضاحى said:

الكود ال انا لاغيه محوله لتعليق 
راجعي الاكواد 

rx6HPsA.png

 

 

غير اني كنت ملاحظ ان الموضوع ادخال يدوي صحيح ؟

 

عموما انا شايف كده افضل (مجرد راي طبعا والامر كله اليكي تختاري ما تفضلينه حسب حاجتك)

اذا حابه تعديله يمكن ان الغيه لكي اذا حبيتي 

 

 

انا فاهمه ان حضرتك لاغيه

انا باعته لحضرتك المثال على اد اللى انا محتاجاه بس 

بس انا عندى تحويل من سن ل تاريخ ميلاد والعكس

محتاجه بس جزئية تجميع السن

 

1 minute ago, safaa salem5 said:

انا فاهمه ان حضرتك لاغيه

انا باعته لحضرتك المثال على اد اللى انا محتاجاه بس 

بس انا عندى تحويل من سن ل تاريخ ميلاد والعكس

محتاجه بس جزئية تجميع السن

 

عايزه لما اخرج من حقل

y

او

m

او

d

او

bdate

 

يحصل عملية التجميع

رابط هذا التعليق
شارك

بصى فى الكود (الصب)


Sub xCalc()
    Dim strAge As String
    Dim arrAge() As String
    Dim years As Integer
    Dim months As Integer
    Dim days As Integer
    Dim xD, xM, xY As Integer
    Dim xAge As Double
'هنا الدالة التى تحسب العمر
    strAge = CalcAge(bdate, Date)
'هنا بيتم البدء فى فصل الايام والشهور والسنوات
    arrAge = Split(strAge, " ")
'هنا تم التوزيع السنوات والشهور والايام على المتغيرات الثلاث
'هنا ممكن تستبدلى بالتوزيع الخاص بكي
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

'
'هنا تم توزيع النتائج على الحقول الثلاث فى النموذج

    Y = years
    M = months
    D = days
'----------------------------------------------------------
    If days >= 20 Then
        xM = months + 1
        xD = 0
    Else
        xD = days
    End If
'----------------------------------------------------------
    If months >= 10 Then
        xY = years + 1
        xM = 0
    Else
        xY = years
        xM = months
    End If
'----------------------------------------------------------

Debug.Print xD
Debug.Print xM
Debug.Print xY

    If xY = 0 And xM = 0 And xD <> 0 Then
        xAge = xD
        ageunit = "Days"
    ElseIf xY = 0 And xM <> 0 And xD <> 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY = 0 And xM <> 0 And xD = 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY <> 0 And xM = 0 And xD <> 0 Then
        xAge = xY
        ageunit = "Years"
    ElseIf xY <> 0 And xM <> 0 And xD = 0 Then
        xAge = xY & "." & xM
        ageunit = "Years"
    Else
        xAge = xY & "." & xM
        ageunit = "Years"
    End If
    age = xAge
'Debug.Print xAge
End Sub

لاحظي انك ممكن تقفذى وتلغي وظيفة الكود من السطر هذا 

    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

 

رابط هذا التعليق
شارك

25 minutes ago, عمر ضاحى said:

بصى فى الكود (الصب)


Sub xCalc()
    Dim strAge As String
    Dim arrAge() As String
    Dim years As Integer
    Dim months As Integer
    Dim days As Integer
    Dim xD, xM, xY As Integer
    Dim xAge As Double
'هنا الدالة التى تحسب العمر
    strAge = CalcAge(bdate, Date)
'هنا بيتم البدء فى فصل الايام والشهور والسنوات
    arrAge = Split(strAge, " ")
'هنا تم التوزيع السنوات والشهور والايام على المتغيرات الثلاث
'هنا ممكن تستبدلى بالتوزيع الخاص بكي
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

'
'هنا تم توزيع النتائج على الحقول الثلاث فى النموذج

    Y = years
    M = months
    D = days
'----------------------------------------------------------
    If days >= 20 Then
        xM = months + 1
        xD = 0
    Else
        xD = days
    End If
'----------------------------------------------------------
    If months >= 10 Then
        xY = years + 1
        xM = 0
    Else
        xY = years
        xM = months
    End If
'----------------------------------------------------------

Debug.Print xD
Debug.Print xM
Debug.Print xY

    If xY = 0 And xM = 0 And xD <> 0 Then
        xAge = xD
        ageunit = "Days"
    ElseIf xY = 0 And xM <> 0 And xD <> 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY = 0 And xM <> 0 And xD = 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY <> 0 And xM = 0 And xD <> 0 Then
        xAge = xY
        ageunit = "Years"
    ElseIf xY <> 0 And xM <> 0 And xD = 0 Then
        xAge = xY & "." & xM
        ageunit = "Years"
    Else
        xAge = xY & "." & xM
        ageunit = "Years"
    End If
    age = xAge
'Debug.Print xAge
End Sub

لاحظي انك ممكن تقفذى وتلغي وظيفة الكود من السطر هذا 

    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

 

هنا ممكن تستبدلى بالتوزيع الخاص بكي
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

 

دى مش فاهماهاه

رابط هذا التعليق
شارك

3 minutes ago, safaa salem5 said:
هنا ممكن تستبدلى بالتوزيع الخاص بكي
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))

 

دى مش فاهماهاه

بص انا عايزه ادى للمستخدم حرية اختيار

لو كتب  تاريخ الميلاد هيتحول ليوم وشهر وسنه

ولو كتب السن سواء كان يوم او شهر او سنه هيتحول لتاريخ ميلاد

وفى كلا الحالتين يتم تجميع السن فى حقل  

age

والجزءيه بتاعت التحويل من والى دى خلاص عملاها

عايزه بس جزئية التجميع

قولى استخدم ايه من الكود والغى ايه

رابط هذا التعليق
شارك

اقصد ان الجزء من هنا وفوق خاص بجلب العمر وتوزيعه على شهور وايام وسنوات 
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))
لكن انت ممكن تعملى ده اذا انت حابه تكتبى السنوات والشهور والايام بنفسك دون حساب
    years = Y 'هنا هياخد قيمة السنوات من حقل السنوات فى النموذج
    months = M 'هنا هياخد قيمة الاشهر من حقل الاشهر فى النموذج
    days = D 'هنا هياخد قيمة الايام من حقل الايام فى النموذج
وهكذا 

والباقي الكود هيكمله عادي 

 

رابط هذا التعليق
شارك

1 hour ago, عمر ضاحى said:

اقصد ان الجزء من هنا وفوق خاص بجلب العمر وتوزيعه على شهور وايام وسنوات 
    years = Val(arrAge(0))
    months = Val(arrAge(2))
    days = Val(arrAge(4))
لكن انت ممكن تعملى ده اذا انت حابه تكتبى السنوات والشهور والايام بنفسك دون حساب
    years = Y 'هنا هياخد قيمة السنوات من حقل السنوات فى النموذج
    months = M 'هنا هياخد قيمة الاشهر من حقل الاشهر فى النموذج
    days = D 'هنا هياخد قيمة الايام من حقل الايام فى النموذج
وهكذا 

والباقي الكود هيكمله عادي 

 

بص انا لما بخرج من تاريخ الميلاد بيحصل تجميع عادى

لكن

لما بخرج من

Y

او

M

او

D

بيدينى رسايل خطأ

انا هبعتلك المثال زى ما انا كنت عاملاه ياريت حضرتك تظبطلى نقطه تجميع السن 

اثناء الخروج من تاريخ الميلاد او من احد حقول السن 

اكون شاكره ليك عشان تعبت ومش عارفه اظبطها

age collect.accdb

رابط هذا التعليق
شارك

10 ساعات مضت, safaa salem5 said:

بص انا لما بخرج من تاريخ الميلاد بيحصل تجميع عادى

لكن

لما بخرج من

Y

او

M

او

D

بيدينى رسايل خطأ

انا هبعتلك المثال زى ما انا كنت عاملاه ياريت حضرتك تظبطلى نقطه تجميع السن 

اثناء الخروج من تاريخ الميلاد او من احد حقول السن 

اكون شاكره ليك عشان تعبت ومش عارفه اظبطها

age collect.accdb 720 kB · 2 downloads

بعتذر عن التأخير
اتفضلى الكود حسب طلبك (بعد اصلاح خطأ سابق)

Sub xCalcAge()

    Dim years As Integer
    Dim months As Integer
    Dim days As Integer
    Dim xD, xM, xY As Integer
    Dim xAge As Double

        years = Nz(Y, 0)
        months = Nz(M, 0)
        days = Nz(D, 0)
        
'----------------------------------------------------------
    If days >= 20 Then
        xM = months + 1
        xD = 0
    Else
        xD = days
    End If
'----------------------------------------------------------
    If xM >= 10 Then
        xY = years + 1
        xM = 0
    Else
        xY = years
        xM = months
    End If
'----------------------------------------------------------

    If xY = 0 And xM = 0 And xD <> 0 Then
        xAge = xD
        ageunit = "Days"
    ElseIf xY = 0 And xM <> 0 And xD <> 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY = 0 And xM <> 0 And xD = 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY <> 0 And xM = 0 And xD <> 0 Then
        xAge = xY
        ageunit = "Years"
    ElseIf xY <> 0 And xM <> 0 And xD = 0 Then
        xAge = xY & "." & xM
        ageunit = "Years"
    Else
        xAge = xY & "." & xM
        ageunit = "Years"
    End If
    age = xAge
End Sub

مرفق الملف

age collect.rar

.


جربي واذا تم حل المشكلة اختاري افضل اجابة

رابط هذا التعليق
شارك

4 hours ago, عمر ضاحى said:

بعتذر عن التأخير
اتفضلى الكود حسب طلبك (بعد اصلاح خطأ سابق)

Sub xCalcAge()

    Dim years As Integer
    Dim months As Integer
    Dim days As Integer
    Dim xD, xM, xY As Integer
    Dim xAge As Double

        years = Nz(Y, 0)
        months = Nz(M, 0)
        days = Nz(D, 0)
        
'----------------------------------------------------------
    If days >= 20 Then
        xM = months + 1
        xD = 0
    Else
        xD = days
    End If
'----------------------------------------------------------
    If xM >= 10 Then
        xY = years + 1
        xM = 0
    Else
        xY = years
        xM = months
    End If
'----------------------------------------------------------

    If xY = 0 And xM = 0 And xD <> 0 Then
        xAge = xD
        ageunit = "Days"
    ElseIf xY = 0 And xM <> 0 And xD <> 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY = 0 And xM <> 0 And xD = 0 Then
        xAge = xM
        ageunit = "Months"
    ElseIf xY <> 0 And xM = 0 And xD <> 0 Then
        xAge = xY
        ageunit = "Years"
    ElseIf xY <> 0 And xM <> 0 And xD = 0 Then
        xAge = xY & "." & xM
        ageunit = "Years"
    Else
        xAge = xY & "." & xM
        ageunit = "Years"
    End If
    age = xAge
End Sub

مرفق الملف

age collect.rar 37.91 kB · 6 downloads

.


جربي واذا تم حل المشكلة اختاري افضل اجابة

كدا تمام جزاك الله خيرا

الداله فيها خطأ بسيط

لما عدد الايام بيكون 30

او عدد الشهور. 30

ليتحول age. =1

Ageunit= years

رابط هذا التعليق
شارك

14 minutes ago, safaa salem5 said:

كدا تمام جزاك الله خيرا

الداله فيها خطأ بسيط

لما عدد الايام بيكون 30

او عدد الشهور. 30

ليتحول age. =1

Ageunit= years

 وعايزه اضيف رساله لو المستخدم دخل يكتب فى

d

قيمه اكتر من 30

تطلع رساله

ادخل عدد الايام بطريقه صحيحه

نفس الكلام لو زاد عدد الشهور عن 12

ادخل عدد الشهور بطريقه صحيحه

 

 

010000.gif

تم تعديل بواسطه safaa salem5
رابط هذا التعليق
شارك

49 دقائق مضت, safaa salem5 said:

 

 

010000.gif

 

الخطأ هذا من الكود الخاص بيكي 
ممكن تستخدمي الدالة ال انا ارفقتها ليكي فى الاول 
للتحويل العمر الي يوم وشهر وسنه 

 

رابط هذا التعليق
شارك

3 hours ago, عمر ضاحى said:

 

الخطأ هذا من الكود الخاص بيكي 
ممكن تستخدمي الدالة ال انا ارفقتها ليكي فى الاول 
للتحويل العمر الي يوم وشهر وسنه 

 

الداله اللى حضرتك عاملها بتحول  تاريخ الميلادل أيام وشهور وسنه 

المشكله بتحصل لما أكتب فى حقل

اليوم

او الشهر

او

السنه

يعنى فى حالة ادخال يدوى فى الحقول دى

يعنى كدا المشكله بعيده عن الداله بتاعت تاريخ الميلاد

Just now, safaa salem5 said:

الداله اللى حضرتك عاملها بتحول  تاريخ الميلادل أيام وشهور وسنه 

المشكله بتحصل لما أكتب فى حقل

اليوم

او الشهر

او

السنه

يعنى فى حالة ادخال يدوى فى الحقول دى

يعنى كدا المشكله بعيده عن الداله بتاعت تاريخ الميلاد

ممكن نحل المشكله

إن انا امنع المستخدم يكتب رقم 

30

حقل D

 او 

12

فى حقل M

برسائل تنبيه 

رابط هذا التعليق
شارك

استاذه / صفي

طلبك فى حد ذاته فيه تعارض 

لا يجوز ان تطلبي تقريب وتحديد تاريح ميلاد 

لان الاثنين معا لن يكون فيها دقه 

اذا اردتي تحويل تاريخ الميلاد الى عمر 

او تحويل العمر الى تاريخ ميلاد طلبك هنا هيكون مظبوط 

لكن ان تطلبي تحديد تاريخ الميلاد وتقريب العمر هنا هتظهر نتائج خطأ

لاحظي الصوره التاليه فى اخر مشهد 

image.thumb.gif.0a8454a5d89f40ca9d03044eb491baf2.gif

 

بعد ما جاب تاريخ الميلاد وقربت غير الدينا 

 

ولتحويل العمر الى تاريخ ميلاد 

هتحتاجي الدالة هذه 

Function CalcBdate(years As Integer, months As Integer, days As Integer) As Date
    CalcBdate = DateAdd("yyyy", -years, Date)
    CalcBdate = DateAdd("m", -months, CalcBdate)
    CalcBdate = DateAdd("d", -days, CalcBdate)
End Function

 

وايضا الصب هذا

Sub TestCalcBirthdate()

    Dim years As Integer
    Dim months As Integer
    Dim days As Integer


    years = Me.Y.Value
    months = Me.M.Value
    days = Me.D.Value
    bdate = CalcBdate(years, months, days)


End Sub

 

age collect.rar.

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information