اذهب الي المحتوي
أوفيسنا

مساعدة تطبيق دالة IF VBA بالفورم على كافة السجلات وليس السجل المحدد


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

السلام عليكم اخواني الاعزاء

لدي FORMمأخوذ بياناته من جدول به عدد من السجلات

وبالخصائص ON LOAD انشأت دالة IF بالكود على مربع نص داخل الFORM

عند التطبيق يتم تطبيق الدالة على السجلات بشكل فردي عند التنقل والبحث فقط

المطلوب كود  لتطبيق الدالة على جميع السجلات عند فتح FORM

جزاكم الله خير الجزاء ان وجدت الاجابة ...

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

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

Private Sub Form_Load()
    Me.Recordset.MoveFirst
    Do While Not Me.Recordset.EOF
        Call YourIfCondition(Me![YourTextBox])
        Me.Recordset.MoveNext
    Loop
    Me.Recordset.MoveFirst
End Sub

Private Sub YourIfCondition(txtBox As TextBox)
    If txtBox.Value = "شرط جملة اف" Then
        MsgBox "قم بتطبيق شرط اف"
    End If
End Sub

ضع جملة الشرط الخاصة بك :IIF في sub
ثم قم باستدعائها في حدث عند التحميل قم باستدعائها في حلقة تكرارية كما هو موضح في المثال

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

اثراء للموضوع و مشاركة مع أستاذي القدير   و معلمي الجليل الأستاذ @AlwaZeeR :fff:

 

قبل أن نخوض في خضم الكود  وجب التنويه الى انه يمكن تحقيق ذلك بأحدي الطريقتين

الطريقة الأولى تعتمد على DAO.Recordset 
الطريقة الثانية تعتمد على Form.Recordset

- الطريقة التي تعتمد على DAO.Recordset تكون أكثر مرونة وقابلة للتوسع خاصة إذا كنت تحتاج للوصول إلى بيانات خارج نموذج معين أو تنفيذ عمليات أكثر تعقيدا

- الطريقة التي تعتمد على Form.Recordset تكون أكثر مباشرة وسهلة الاستخدام عندما يكون الهدف هو التفاعل مع السجلات المعروضة في النموذج الحالي

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

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

- الطريقة الأولي :

Private Sub Form_Load()
    ' تعريف متغيرات قاعدة البيانات
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim yourVariable As String ' المتغير العام الذي يعتمد عليه الأمر
    
    ' تعيين المتغير العام
    yourVariable = YourTextBox
    
    ' تعيين قاعدة البيانات الحالية
    Set db = CurrentDb
    
    ' SQL الاستعلام الذي يجلب كل السجلات من الجدول
    strSQL = "SELECT * FROM YourTableName"
    
    ' فتح مجموعة السجلات
    Set rs = db.OpenRecordset(strSQL)
    
    ' التحقق من أن مجموعة السجلات ليست فارغة
    If Not rs.EOF Then
        rs.MoveFirst
        ' لوب على جميع السجلات
        Do While Not rs.EOF
            ' تنفيذ الأمر بناء على المتغير العام
            If rs!FieldName = yourVariable Then
                ' هنا تضع الأمر الذي تريده
                MsgBox "Record found with your variable value!"
            End If
            ' الانتقال للسجل التالي
            rs.MoveNext
        Loop
    End If
    
    ' إغلاق مجموعة السجلات
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub


- الطريقة الثانية :

Private Sub Form_Load()
    Dim rs As DAO.Recordset
    Set rs = Me.Recordset.Clone
    
    rs.MoveFirst
    Do While Not rs.EOF
        If rs.Fields("YourFieldName").Value = "شرط جملة اف" Then
            MsgBox "قم بتطبيق شرط اف"
        End If
        rs.MoveNext
    Loop
    
    Set rs = Nothing
End Sub

 

وحتى لا يتم السؤال لاحقا عن اى الطريقتين افضل ! :

الكود الأول (DAO) قد يكون أكثر كفاءة إذا كنت تحتاج إلى إجراء عمليات معقدة أو تحتاج إلى التعامل مع جداول ليست مرتبطة بالنموذج
الكود الثاني (Form.Recordset) بسيط وسهل الفهم ومناسب للتفاعلات السريعة مع السجلات المعروضة في النموذج


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

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

 

هام وعاجل :
تم كتابة التعليقات والتلميحات باللغة العربية للتبسيط و لدواعي الشرح فقط ولا أحبذ ذلك قطعا

تجنبا لمشاكل اللغة العربية مع محرر الأكواد 

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

السادة الافاضل 

شاكرا جهودكم بالمساعدة لكني اود ان ابين بأن مربع النص عبارة عن كومبوبوكس ويحتوي على قائمة منسدلة 

ودالة IF مثبته على كل قيمة بالقائمة المنسدلة اي بما معنى اكثر من دالة IF وليست واحدة

ارفق الملف لتوضيح الموضوع اكثر علما بأن الكود مكتوب عند ON CURRENT بالفورم 

شاكر تعاونكم وسعة صدركم بالردود والمساعدة

1.accdb

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

7 ساعات مضت, ابو جودي said:

اثراء للموضوع و مشاركة مع أستاذي القدير   و معلمي الجليل الأستاذ @AlwaZeeR :fff:

 

قبل أن نخوض في خضم الكود  وجب التنويه الى انه يمكن تحقيق ذلك بأحدي الطريقتين

الطريقة الأولى تعتمد على DAO.Recordset 
الطريقة الثانية تعتمد على Form.Recordset

- الطريقة التي تعتمد على DAO.Recordset تكون أكثر مرونة وقابلة للتوسع خاصة إذا كنت تحتاج للوصول إلى بيانات خارج نموذج معين أو تنفيذ عمليات أكثر تعقيدا

- الطريقة التي تعتمد على Form.Recordset تكون أكثر مباشرة وسهلة الاستخدام عندما يكون الهدف هو التفاعل مع السجلات المعروضة في النموذج الحالي

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

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

- الطريقة الأولي :

Private Sub Form_Load()
    ' تعريف متغيرات قاعدة البيانات
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim yourVariable As String ' المتغير العام الذي يعتمد عليه الأمر
    
    ' تعيين المتغير العام
    yourVariable = YourTextBox
    
    ' تعيين قاعدة البيانات الحالية
    Set db = CurrentDb
    
    ' SQL الاستعلام الذي يجلب كل السجلات من الجدول
    strSQL = "SELECT * FROM YourTableName"
    
    ' فتح مجموعة السجلات
    Set rs = db.OpenRecordset(strSQL)
    
    ' التحقق من أن مجموعة السجلات ليست فارغة
    If Not rs.EOF Then
        rs.MoveFirst
        ' لوب على جميع السجلات
        Do While Not rs.EOF
            ' تنفيذ الأمر بناء على المتغير العام
            If rs!FieldName = yourVariable Then
                ' هنا تضع الأمر الذي تريده
                MsgBox "Record found with your variable value!"
            End If
            ' الانتقال للسجل التالي
            rs.MoveNext
        Loop
    End If
    
    ' إغلاق مجموعة السجلات
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub


- الطريقة الثانية :

Private Sub Form_Load()
    Dim rs As DAO.Recordset
    Set rs = Me.Recordset.Clone
    
    rs.MoveFirst
    Do While Not rs.EOF
        If rs.Fields("YourFieldName").Value = "شرط جملة اف" Then
            MsgBox "قم بتطبيق شرط اف"
        End If
        rs.MoveNext
    Loop
    
    Set rs = Nothing
End Sub

 

وحتى لا يتم السؤال لاحقا عن اى الطريقتين افضل ! :

الكود الأول (DAO) قد يكون أكثر كفاءة إذا كنت تحتاج إلى إجراء عمليات معقدة أو تحتاج إلى التعامل مع جداول ليست مرتبطة بالنموذج
الكود الثاني (Form.Recordset) بسيط وسهل الفهم ومناسب للتفاعلات السريعة مع السجلات المعروضة في النموذج


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

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

 

هام وعاجل :
تم كتابة التعليقات والتلميحات باللغة العربية للتبسيط و لدواعي الشرح فقط ولا أحبذ ذلك قطعا

تجنبا لمشاكل اللغة العربية مع محرر الأكواد 

استاذنا الفاضل

شكري وامتناني لاهتمامكم  

ارفقت الملف مع التوضيح لاكمال جميلكم وحل الموضوع

وفقكم الله وجعلها بميزان حسناتكم 

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

14 ساعات مضت, AlwaZeeR said:

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

Private Sub Form_Load()
    Me.Recordset.MoveFirst
    Do While Not Me.Recordset.EOF
        Call YourIfCondition(Me![YourTextBox])
        Me.Recordset.MoveNext
    Loop
    Me.Recordset.MoveFirst
End Sub

Private Sub YourIfCondition(txtBox As TextBox)
    If txtBox.Value = "شرط جملة اف" Then
        MsgBox "قم بتطبيق شرط اف"
    End If
End Sub

ضع جملة الشرط الخاصة بك :IIF في sub
ثم قم باستدعائها في حدث عند التحميل قم باستدعائها في حلقة تكرارية كما هو موضح في المثال

استاذنا الفاضل

شكري وامتناني لاهتمامكم  

ارفقت الملف مع التوضيح لاكمال جميلكم وحل الموضوع

وفقكم الله وجعلها بميزان حسناتكم 

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

اولا :
ياريت تتعب نفسك شوية وتشرح النتيجة اللى انت عاوز توصلها بناء على المرفق

بصراحة لن اضيع وقتى مع من يبخل بوقته  :angry:

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

شوف اذا التعديل مناسب 

ملاحظة فى سؤالك الاول انت قلت فى حدث التحميل تريد تنفيذ شرط على كل السجلات
وطبعا تم وضع الاجابة نظريا طبقا للسؤال التظرى

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

حذ بالط طل ده انا تاعب نفسى واحاول افهم وافهمك وانا اصلا مش فاهم :biggrin2: لانك بخيل 

 

اذا التعديل مشى معاك احمد ربنا 

واذا ما لبى طلبك اشرح وانتظر العون من احد الاساتذة الافاضل الكرام 

1.accdb

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

في 21‏/6‏/2024 at 03:09, ابو جودي said:

اولا :
ياريت تتعب نفسك شوية وتشرح النتيجة اللى انت عاوز توصلها بناء على المرفق

بصراحة لن اضيع وقتى مع من يبخل بوقته  :angry:

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

شوف اذا التعديل مناسب 

ملاحظة فى سؤالك الاول انت قلت فى حدث التحميل تريد تنفيذ شرط على كل السجلات
وطبعا تم وضع الاجابة نظريا طبقا للسؤال التظرى

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

حذ بالط طل ده انا تاعب نفسى واحاول افهم وافهمك وانا اصلا مش فاهم :biggrin2: لانك بخيل 

 

اذا التعديل مشى معاك احمد ربنا 

واذا ما لبى طلبك اشرح وانتظر العون من احد الاساتذة الافاضل الكرام 

1.accdb 716 kB · 1 download

اولا لا اعلم ما هو سبب الاسلوب التهجمي والنعت بكلمة البخيل 

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

حضرتك يمكن مشرف او من ضمن مؤسسي الفريق ولو تلاحظ مكتوب بحسابي (عضو جديد)

ومن ضمن متابعتي للمنتدى لاحظت مواضيع من اعضاء تكون بها اكثر من ردود وارفاق الملف اكثر من مره وارساله الى المختصين لحين فهم الفكره

كان لازم تخلي بحساباتك انك ماتتعامل مع ناس خبره مثل حضرتك ومن الممكن اني او غيري منكدر نوصل الفكرة بالطريقة الي تريدها من اول مره 

وياريت يكون صدرك رحب ويه الحالات المماثلة والا بلاها تحل مشكلة والمقابل يدعيلك بالنجاح والموفقية وانت ترد عليه باسلوب ناشف 

عموما الملف لم يفي بالغرض للامانه والله لو اعرف انه يكون هذا ردك مكان اطلب او اشارك وهاي اول مره اطلب شي من احد بهذا المجال واخر مره 

تحياتي الك 

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

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

اخى يا رعاك الله لا تجتزئ الكلام تركت كل الرد وفقط تعلق على الكلمة بخيل

اكثر ما اكرهه هو تصيد أخطاء الاخرين 

على كل كان توجيه في صورة مزاح

ولتعلم كل ما يقدم هنا ابتغاء مرضاة الله ولوجه الله تعالى ولا نحتسب ما نقدم الا كذلك 

اذا انت شخص جاسر وجسور ولا تفهم ولا تحب المزاح اعتذر اليك :yes: 

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

 

أخى الحبيب كن هين لين 

وبما انك عضو جديد وبما انك لك كل الحق في طرح اسئلتك لتحصل من وراء ذلك مبتغاك عليك واجبات كذلك

اذا اتبع الواجبات حتى تحصد الحقوق

اول الواجبات كان اولى بك قبل المشاركة قراءة قوانين المنتدى
https://www.officena.net/Tips/Questions.htm

والتى ستجد ضمنها على سبيل المثال والذى كان سببا فى عدم حصولك على النتيجة

اقتباس

 

8.    يجب ذكر كافة المعلومات التي من الممكن أن تُسأل عنها، مع الشرح الوافي للمشكلة لأن الشخص الذي تكتب له ليس ملما بالمشكلة مثلك. ويحبذ وضع مثال للنتيجة التي تريدها (سواء كملف مرفق باستخدام البرنامج المطلوب كالاكسيل او الأكسيس مثلا، او صورة توضيحية، أو تفصيل المطلوب بشرح وافي)، ويجب ان تكون بيانات المثال نابعة من نفس بيانات المرفق كي بمكن الربط و الفهم بسهولة.

9.    بخصوص التسميات، يُفضل أن تكون أسماء الكائنات والحقول بالإنجليزية، لان العربية تحدث فيها مشاكل مع الأكواد.

 


طيب وقبل مغادرتي 

فهم السؤال بشكل نموذجي يعين على الإجابة عليه بشكل نموذجي
فهم السؤال جيدا يوفر علينا وقت وجهد ثمينين نهدرهما

اطرح سؤالك بشكل كاف وبين الهدف والسيناريو وفق المرفق حتى تجد من يستطيع مساعدتك

 

اهلا بك بين اخوانك :fff:

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

2 دقائق مضت, ابو جودي said:

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

اخى يا رعاك الله لا تجتزئ الكلام تركت كل الرد وفقط تعلق على الكلمة بخيل

اكثر ما اكرهه هو تصيد أخطاء الاخرين 

على كل كان توجيه في صورة مزاح

ولتعلم كل ما يقدم هنا ابتغاء مرضاة الله ولوجه الله تعالى ولا نحتسب ما نقدم الا كذلك 

اذا انت شخص جاسر وجسور ولا تفهم ولا تحب المزاح اعتذر اليك :yes: 

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

 

أخى الحبيب كن هين لين 

وبما انك عضو جديد وبما انك لك كل الحق في طرح اسئلتك لتحصل من وراء ذلك مبتغاك عليك واجبات كذلك

اذا اتبع الواجبات حتى تحصد الحقوق

اول الواجبات كان اولى بك قبل المشاركة قراءة قوانين المنتدى
https://www.officena.net/Tips/Questions.htm

والتى ستجد ضمنها على سبيل المثال والذى كان سببا فى عدم حصولك على النتيجة


طيب وقبل مغادرتي 

فهم السؤال بشكل نموذجي يعين على الإجابة عليه بشكل نموذجي
فهم السؤال جيدا يوفر علينا وقت وجهد ثمينين نهدرهما

اطرح سؤالك بشكل كاف وبين الهدف والسيناريو وفق المرفق حتى تجد من يستطيع مساعدتك

 

اهلا بك بين اخوانك :fff:

اشكر رحابة صدرك يمكن  الخطأ مني فهمت كلامك صورة غير صحيحة

واقدم اعتذاري كونه قبل كل شيء انك افرغت جزء من وقتك للاجابة على موضوعي

وشكرا لك لتفريغ وقتك وتزويدي بالاكواد وتحميل المرفق

استاذي الفاضل

لودلاحظت بالمرفق والقائمة المنسدلة لدي اجازات عند الاختيار من القائمة (الوقوعات) 

تقوم الاستقطاع وفقا لتاريخ معين مثلا تم الاستقطاع لشهر حزيران وضعت كود if لقرائة عند الوصول الى شهر تموز تصفر القيم تلقائيا 

موضوعي كان انه اتممت كل شيء وعند فتح الفورم وجب عليه التنقل بين السجلات لتطبيق مامذكور اعلاه

طلبي كان بمجرد فتح النموذج هل هنالك كود يقوم بالبحث برمجيا وتطبيق اعلاه بمجرد فتح الفورم دون التنقل بين السجلات 

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

3 دقائق مضت, ابو جودي said:

من واقع المرفق ايه الكود اللى بينفذ طلبك اللى فى الحدث الحالى ؟؟

اي نعم كود if المتعلق بكلمة "الوقووعات"

والي بالحدث الحالي بالنموذج موجود 

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

مادري اذا اكو طريقة تتصفر تلقائيا بدون تصفح 

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information