بسم الله الرحمن الرحيم
الاخوة / الاخوات الافاضل
ما هو الكود عند فتح اي نموذج ويقوم بالتاكد من عدم وجود اي نموذج اخر مفتوح وان كان هناك نموذج مفتوح يقوم باغلاقه
بسم الله الرحمن الرحيم
الاخوة / الاخوات الافاضل
ما هو الكود عند فتح اي نموذج ويقوم بالتاكد من عدم وجود اي نموذج اخر مفتوح وان كان هناك نموذج مفتوح يقوم باغلاقه
للرفع
انا لا اعمل على الاكسيس
ولكن على الVB
انا استخدم دالة app.PrevInstance
الايمان +الحلم +العلم +العمل = النجاح
ما اسهل ان تنجح ... وما اصعب ان تحافظ على نجاحك
اليك الطريقة التالية
قم بنسخ الوحدة النمطية التالية و قم بحفظها بأي اسم تريده
Function fIsLoaded(ByVal strFormName As String) As Boolean If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then If Forms(strFormName).CurrentView <> 0 Then fIsLoaded = True End If End If End Function
بعد ذلك تذهب الى النموذج الذي تريده فتحه و يتحقق في نغس الوقت من وجود نموذج آخر مفتوح ليقوم بغلقه تلقائيا و تضع الكود التالي في حدث عند فتحه مثلا:
If fIsLoaded("frm2") Then
DoCmd.Close acForm, "frm2"
End Ifحيث أن frm2 هو اسم النموذج الذي نريد غلقه تلقائيا اذا كان مفتوحا.
المثال المرفق يوجد به نموذجين قم بفتح النموذج frm2 أولا و قم بتحركه من مكانه قليلا حتى تتمكن من معاينة كيفية غلقه تلقائيا, ثم قم بفتح النموذج tblTimes و لاحظ أنه سوف يقوم بغلق النموذج frm2 .
الف شكر اخي الكريم على ردك السريع وعلى مشاركتك الايجابيه لمساعدة المبتدئين امثالي...... هذا فعلا هو المطلوب
ولكن عذرا
هل معنى ذلك انه اذا كان يوجد لدي مثلا 10 نماذج فاني اقوم بتكرار
If fIsLoaded("frm2") Then
DoCmd.Close acForm, "frm2"
End If
اقوم بتكرار هذا المقطع 10 مرات باسماء النماذج كلها
ام ماذا
حيث انني كنت اتصور ان يكون الحل
بواسطة كود شبيه ب For Each بحيث لا احدد له اسم النموذج وانما يقوم الكود بفحص ما اذا وجد نموذج مفتوح يقوم هو باقفاله
والمقصود اي نموذج بدون تحديد مسميات لان ذلك ولا يخفى عليك سيكون صعب في برنامج يحتوي العديد من النماذج
للرفع
تفضل بالمطلوب و بطريقة أسهل بواسطة الكود التالي , دائما في حدث عند الفتح للنموذج الذي نريد اذا فتحناه يغلق بقية النماذج و يمكن تطبيقه على أي نموذج فقط نغير اسم النموذج
Dim obj As AccessObject, dbs As Object Set dbs = Application.CurrentProject For Each obj In dbs.AllForms If obj.IsLoaded = True Then If obj.Name <> "tblTimes" Then DoCmd.Close acForm, obj.Name End If End If Next obj
و هذا مثال على ذلك ,قم بفتح كل النماذج و من افتح النموذج tblTimes و لاحظ ماذا يحدث.
الف الف شكر اخي الكريم biskra
لقد اصبت فعلا .... هذا هو المطلوب تماما
جزاك الله عني كل الخير
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…