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

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

قام بنشر

وعليكم السلام ورحمة الله وبركاته ..

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

قام بنشر

اعتذر عن التأخير ..

في مديول جديد ، الصق الكود التالي :-

Function DurationToWords(StartDate As Variant, EndDate As Variant) As String
    Dim diff As Integer

    If IsNull(StartDate) Or IsNull(EndDate) Then
        DurationToWords = "لم يتم إدخال تاريخين للمقارنة"
        Exit Function
    End If

    diff = DateDiff("yyyy", StartDate, EndDate)

    If Month(EndDate) < Month(StartDate) Or _
       (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then
        diff = diff - 1
    End If

    Select Case diff
        Case Is < 0
            DurationToWords = "تاريخ غير صالح"
        Case 0
            DurationToWords = "أقل من سنة"
        Case 1
            DurationToWords = "سنة واحدة"
        Case 2
            DurationToWords = "سنتان"
        Case 3 To 10
            DurationToWords = NumberToArabicWords(diff, True) & " سنوات"
        Case Else
            DurationToWords = NumberToArabicWords(diff, True) & " سنة"
    End Select
End Function

Function NumberToArabicWords(ByVal Number As Long, Optional IsFeminine As Boolean = False) As String
    Dim UnitsMasc, UnitsFem, Tens, TeensMasc, TeensFem, Hundreds
    UnitsMasc = Array("", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة")
    UnitsFem = Array("", "واحدة", "اثنتان", "ثلاث", "أربع", "خمس", "ست", "سبع", "ثمان", "تسع")

    TeensMasc = Array("عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر")
    TeensFem = Array("عشرة", "إحدى عشرة", "اثنتا عشرة", "ثلاث عشرة", "أربع عشرة", "خمس عشرة", "ست عشرة", "سبع عشرة", "ثماني عشرة", "تسع عشرة")

    Tens = Array("", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون")
    Hundreds = Array("", "مئة", "مئتان", "ثلاثمئة", "أربعمئة", "خمسمئة", "ستمئة", "سبعمئة", "ثمانمئة", "تسعمئة")

    Dim Words As String
    Dim n As Long
    Dim h, t, u As Integer

    If Number = 0 Then
        NumberToArabicWords = "صفر"
        Exit Function
    End If

    If Number = 10 Then
        NumberToArabicWords = IIf(IsFeminine, "عشر", "عشرة")
        Exit Function
    End If

    If Number > 999 Then
        Dim Thousands As Long
        Thousands = Number \ 1000
        Words = NumberToArabicWords(Thousands, False) & " ألف"
        n = Number Mod 1000
        If n > 0 Then Words = Words & " و" & NumberToArabicWords(n, IsFeminine)
        NumberToArabicWords = Words
        Exit Function
    End If

    h = Number \ 100
    t = (Number Mod 100) \ 10
    u = Number Mod 10

    If h > 0 Then Words = Hundreds(h)

    If (Number Mod 100) >= 11 And (Number Mod 100) <= 19 Then
        If Words <> "" Then Words = Words & " و"
        If IsFeminine Then
            Words = Words & TeensFem((Number Mod 100) - 10)
        Else
            Words = Words & TeensMasc((Number Mod 100) - 10)
        End If
    Else
        Dim UnitsArray
        UnitsArray = IIf(IsFeminine, UnitsFem, UnitsMasc)

        If t > 1 Then
            If u > 0 Then
                If Words <> "" Then Words = Words & " و"
                Words = Words & UnitsArray(u) & " و" & Tens(t)
            Else
                If Words <> "" Then Words = Words & " و"
                Words = Words & Tens(t)
            End If
        ElseIf u > 0 Then
            If Words <> "" Then Words = Words & " و"
            Words = Words & UnitsArray(u)
        End If
    End If

    NumberToArabicWords = Words
End Function

 

وفي حدث بعد التحديث لمربعي نص التاريخ :-

Private Sub date2_AfterUpdate()
    Me.mo = DurationToWords([date1], [date2])
End Sub

Private Sub date1_AfterUpdate()
    Me.mo = DurationToWords([date1], [date2])
End Sub

 

Untitled.png.34ef260e720d3cafb9045efef1809210.png

 

تفقيط التاريخ 1.accdbFetching info...

قام بنشر (معدل)

اخيFoksh اشكرك من كل قلبي واسف جدا على الاطالة فيه تعديل على المثال ممكن تفتح المثال وتقرا المطلوب وجزاك الله خير الجزاء .

 

تفقيط التاريخ 1.accdbFetching info...

تم تعديل بواسطه dd13901390
تعديل على المطلوب
قام بنشر
  في 7‏/4‏/2025 at 19:12, dd13901390 said:

اخيFoksh اشكرك من كل قلبي واسف جدا على الاطالة فيه تعديل على المثال ممكن تفتح المثال وتقرا المطلوب وجزاك الله خير الجزاء .

 

تفقيط التاريخ 1.accdb 780 kB · 3 downloads

Expand  

العفو يا صديقي ، ولا يهمك ,,

لك مني نصيحة وهي الابتعاد عن التسميات العربية للحقول أو الجداول أو النماذج أو مكوناتها .. لذا قمت بتغيير اسم مربع النص الخاص بالحالة = Tx_Status . وعليه فقد استخدمت التنسيق الشرطي لتنفيذ طلبك مع دالة جديدة لإضافة كلمة Expired أو Current ,,

حيث الدالة الجديدة :-

Function GetDurationStatus(StartDate As Variant, EndDate As Variant) As String
    Dim diff As Integer
    
    If IsNull(StartDate) Or IsNull(EndDate) Then
        GetDurationStatus = ""
        Exit Function
    End If

    diff = DateDiff("yyyy", StartDate, EndDate)

    If Month(EndDate) < Month(StartDate) Or _
       (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then
        diff = diff - 1
    End If

    If diff < 1 Then
        GetDurationStatus = "Expired"
    Else
        GetDurationStatus = "Current"
    End If
End Function

صورة توضيحية :-

Animation.thumb.gif.c726de8671fc161b1af33f4f79d7c6ee.gif

 

الملف المرفق :-

تفقيط التاريخ 1.accdbFetching info...

 

قام بنشر (معدل)

معلش استحملني شوية ، ما فهمتش ازاي الفرق بين 01/01/2024 و 01/01/2025 يكون أقل من سنة ؟؟؟؟؟؟

ولا انت عايز ايه بالضبط ما فهمتش من المثال اخي الكريم :blink: .

 

يعني انت عايزها لو سنة يكون منتهي الصلاحية وباللون الأحمر ؟؟؟؟

ولو أكتر من سنة يكون أخضر ؟؟؟؟

أتمنى أن لا يكون جوابك نعم !!!!!

لأن حضرتك عايز تقارن بين التاريخين على مستوى السنة ,, يعني :-

01/01/2023 و 01/01/2025 = سنتين وسيكون الناتج اخضر والصلاحية فعالة
02/01/2023 و 01/01/2025 = ستكون النتيجة سنة واحدة وبالتالي سيكون اللون أحمر ومنتهي الصلاحية .

 

اذا كانت ملتزماً بفترات = سنة واحدة فلك ذلك بإضافة شرط للشرط التنسيقي كما في الصورة :-

Untitled.png.c2db9420abce431df15041563f566b5c.png

 

وتعديل الدالة الأخيرة في المديول الى التالي :-

Function GetDurationStatus(StartDate As Variant, EndDate As Variant) As String
    Dim diff As Integer
    
    If IsNull(StartDate) Or IsNull(EndDate) Then
        GetDurationStatus = ""
        Exit Function
    End If

    diff = DateDiff("yyyy", StartDate, EndDate) - 1 '<----------- تم التعديل هنا بطرح يوم واحد فقط

    If Month(EndDate) < Month(StartDate) Or _
       (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then
        diff = diff - 1
    End If

    If diff < 1 Then
        GetDurationStatus = "Expired"
    Else
        GetDurationStatus = "Current"
    End If
End Function

 

تم تعديل بواسطه Foksh
تقديم مقترح
قام بنشر (معدل)

هلا اخوي لا ابغى سنة او اكثر يكون اخضر اقل من سنة يكون احمر ولك الشكر ممكن ترفق المثال التي تم التعديل عليه الذي تم الشرح عليه السابق

تم تعديل بواسطه dd13901390
قام بنشر (معدل)
  في 8‏/4‏/2025 at 16:48, dd13901390 said:

هلا اخوي لا ابغى سنة او اكثر يكون اخضر اقل من سنة يكون احمر ولك الشكر

Expand  

اعتذر عن المتابعة .. :smile: 

فأنت لا تعرف ماذا تريد 🙄 

تم تعديل بواسطه Foksh
قام بنشر

اسف جدا اخوي foksh  ولكن ارجو من الله ثم منك اخوي المساعدة وانني محتاج لهذا الشرح اريد عندما يكون الصلاحية سنة يحسب من تاريخ الجهاز مثلا اخوي تاريخ اليوم 2025/04/08

1- عندما ادخل تاريخ البداية 2024/04/08 حتى 2025/04/08 هذة المدة طبعا سنة يكون اخضر او 2024/04/08 حتى 2026/04/08 سنتان اخضر 

2- عندما ادخل تاريخ البداية 2024/04/07 حتى تاريخ امس2025/04/07 يكون احمر لان تاريخ اليوم في الجهاز 2025/04/08  هذا المطلوب والرجاء المساعدة 

 

اسف جدا على الاطالة

  • Sad 1
  • تمت الإجابة
قام بنشر

ليس من طبعي عدم استكمال بداية قد بدأتها ،ولكنك اخي الكريم في كل مرة تقوم بتوجيه طلب مختلف ، أو انك من البداية لم تقم بتوضيح المطلوب بشكل جيد . وها ما جعلني استنكف عن المتابعة .

لكن على العموم ، اتمنى ان لايكون الهدف في رأسك غير الذي أشرت اليه مؤخراً . ولذا فهذه تجربتي علها تكون ما تريده .

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

Function DurationToWords(StartDate As Variant, EndDate As Variant) As String
    Dim diff As Integer

    If IsNull(StartDate) Or IsNull(EndDate) Then
        DurationToWords = "لم يتم إدخال تاريخين للمقارنة"
        Exit Function
    End If

    diff = DateDiff("yyyy", StartDate, EndDate)

    If Month(EndDate) < Month(StartDate) Or _
       (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then
        diff = diff - 1
    End If

    Select Case diff
        Case Is < 0
            DurationToWords = "تاريخ غير صالح"
        Case 0
            DurationToWords = "أقل من سنة"
        Case 1
            DurationToWords = "سنة واحدة"
        Case 2
            DurationToWords = "سنتان"
        Case 3 To 10
            DurationToWords = NumberToArabicWords(diff, True) & " سنوات"
        Case Else
            DurationToWords = NumberToArabicWords(diff, True) & " سنة"
    End Select
End Function

Function NumberToArabicWords(ByVal Number As Long, Optional IsFeminine As Boolean = False) As String
    Dim UnitsMasc, UnitsFem, Tens, TeensMasc, TeensFem, Hundreds
    UnitsMasc = Array("", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة")
    UnitsFem = Array("", "واحدة", "اثنتان", "ثلاث", "أربع", "خمس", "ست", "سبع", "ثمان", "تسع")

    TeensMasc = Array("عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر")
    TeensFem = Array("عشرة", "إحدى عشرة", "اثنتا عشرة", "ثلاث عشرة", "أربع عشرة", "خمس عشرة", "ست عشرة", "سبع عشرة", "ثماني عشرة", "تسع عشرة")

    Tens = Array("", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون")
    Hundreds = Array("", "مئة", "مئتان", "ثلاثمئة", "أربعمئة", "خمسمئة", "ستمئة", "سبعمئة", "ثمانمئة", "تسعمئة")

    Dim Words As String
    Dim n As Long
    Dim h, t, u As Integer

    If Number = 0 Then
        NumberToArabicWords = "صفر"
        Exit Function
    End If

    If Number = 10 Then
        NumberToArabicWords = IIf(IsFeminine, "عشر", "عشرة")
        Exit Function
    End If

    If Number > 999 Then
        Dim Thousands As Long
        Thousands = Number \ 1000
        Words = NumberToArabicWords(Thousands, False) & " ألف"
        n = Number Mod 1000
        If n > 0 Then Words = Words & " و" & NumberToArabicWords(n, IsFeminine)
        NumberToArabicWords = Words
        Exit Function
    End If

    h = Number \ 100
    t = (Number Mod 100) \ 10
    u = Number Mod 10

    If h > 0 Then Words = Hundreds(h)

    If (Number Mod 100) >= 11 And (Number Mod 100) <= 19 Then
        If Words <> "" Then Words = Words & " و"
        If IsFeminine Then
            Words = Words & TeensFem((Number Mod 100) - 10)
        Else
            Words = Words & TeensMasc((Number Mod 100) - 10)
        End If
    Else
        Dim UnitsArray
        UnitsArray = IIf(IsFeminine, UnitsFem, UnitsMasc)

        If t > 1 Then
            If u > 0 Then
                If Words <> "" Then Words = Words & " و"
                Words = Words & UnitsArray(u) & " و" & Tens(t)
            Else
                If Words <> "" Then Words = Words & " و"
                Words = Words & Tens(t)
            End If
        ElseIf u > 0 Then
            If Words <> "" Then Words = Words & " و"
            Words = Words & UnitsArray(u)
        End If
    End If

    NumberToArabicWords = Words
End Function

Function GetDurationStatus(StartDate As Variant, EndDate As Variant) As String
    If IsNull(StartDate) Or IsNull(EndDate) Then
        GetDurationStatus = ""
        Exit Function
    End If

    If EndDate < Date Then
        GetDurationStatus = "Expired"
    Else
        GetDurationStatus = "Current"
    End If
End Function

 

وفي التنسيق الشرطي استدعينا الدالة بها الشكل كما في الصورة :-

image.png.805b396261514c0a707210ff9444f8ca.png

حيث تم استدعاء الدالة مع تحديد اذا كانت النتيجة = Expired أو Current لتحديد اللون .

 

المرفق الأخير :-

تفقيط التاريخ 1 (2).accdbFetching info...

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