مثلا انا في نموذج سندات القبض أو غيره واريد ان افتح نموذج الفواتير بمفتاح F3
ماهي طريقة فتح نموذج بالضغط على مفتاح F3 من أي مكان في البرنامج
شكرا أبوعقل على مساعدتك لي .
مزيدا من توضيح لطلبي ..اريد برمجة مفتاح F3 لفتح نموذج معين بحيث يمكن استخدام هذا المفتاح في اي مكان في البرنامج ، طريقتك هذه تحتاج مني ان اعرف هذا المفتاح في كل نماذج البرنامج وتخيل لوكان عندي 40 نموذج مثلا علي ان اعرف اربعين مرة برمجة مفتاح F3
وهذا شاق جدا وغير منطقي وتخيلي انني اريد ان اعرف كذلك 5 مفاتيح لعمل اشياء معينة ففي كل مرة اضطر ان اعرف في جميع النماذج
اقتباسوهذا شاق جدا وغير منطقي
إن الطريقة الوحيدة المعروفة لي هي التي إستخدمها الاخ أبو عقيل
و هي مرتبطة بحدث خاص بالنموذج
و عليه فان ما تجده شاقا هو الحل الوحيد المتاح ( علي حد علمي )
و الله أعلم
و نتمني أن تجد لنا طريقة منطقية و غير شاقة :)
مع ملاحظة أن نسخ الكود فى كل النماذج هو عمل غير شاق لانه نفس الكود و أنه بالتأكيد ان التصميم الامثل لا يحتاج الي فتح نموذج معين من أي مكان فى الفورم
و ان كان كذلك فيمكنك وضع قوائم للمشروع و استخدامها و اذا أردت استخدام المفاتيح فسيكون عليك التعامل معها من خلال أحد أحداث الزر مثل Form_KeyDown الخاصة بالنموذج الفعال
مع ملاحظة انه فى حالة تكرار الكود فى أكثر من نموذج يتم كتابة روتين فرعي واحد فى وحدة نمطية يخص جميع الازرار ثم استدعاؤه بسطر واحد فى كل نموذج
مثال
من موضوه مشابه فى قسم الاوفيس ( الكود يخص الباوربوينت )
Public Sub moveit(KeyCode) Select Case KeyCode Case 49 MsgBox "You Pressed on 1 and you shall go to slide no 1" With SlideShowWindows(1).View .GotoSlide 1 End With Case 50 MsgBox "You Pressed on 2 and you shall go to slide no 2" With SlideShowWindows(1).View .GotoSlide 2 End With Case 51 MsgBox "You Pressed on 3 and you shall go to slide no 3" With SlideShowWindows(1).View .GotoSlide 3 End With Case 52 MsgBox "You Pressed on 4 and you shall go to slide no 4" With SlideShowWindows(1).View .GotoSlide 4 End With Case 97 MsgBox "You Pressed on 1 and you shall go to slide no 1" With SlideShowWindows(1).View .GotoSlide 1 End With Case 98 MsgBox "You Pressed on 2 and you shall go to slide no 2" With SlideShowWindows(1).View .GotoSlide 2 End With Case 99 MsgBox "You Pressed on 3 and you shall go to slide no 3" With SlideShowWindows(1).View .GotoSlide 3 End With Case 100 MsgBox "You Pressed on 4 and you shall go to slide no 4" With SlideShowWindows(1).View .GotoSlide 4 End With Case 27 MsgBox "You Pressed Esc, Good bye !!" With SlideShowWindows(1).View .Exit End With Case Else MsgBox " Sorry this example is prepared for only 4 slides," & Chr(10) & Chr(13) & _ "Choose a number from 1 to 4 please" & Chr(13) & Chr(13) & "Best Regards from : Mohamed Taher" End Select End Sub
و يتم استدعاؤه فقط ب
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call moveit(KeyCode) End Sub
و الله أعلم
شكرا محمد على تفاعلك مع الموضوع
اخ محمد قلت :أن نسخ الكود فى كل النماذج هو عمل غير شاق لانه نفس الكود !
اضرب لك مثال بسط بالالة الحاسبة قد احتاح ان أبرمج مفتاح F7 بحيث عند الضغط عليه يشغل برنامج الالة الحاسبة في اي وقت من اوقات تشغيل البرنامج وفي
اي مكان سواء كانت فاتح نموذج او تقرير .
على طريقتك احتاج ان امر على كل النماذج والتقارير وهذا غير منطقي وهدر لوقت المبرمج ( حتى لوكان عددها قليل 5 مثلا ) منطق البرمجة السليم يقول انه
للابد من وجود امكانية تسمح لي بذلك ،
اضرب لك مثال شبيه بطلبي بعريف مثغير ثابت ، افتح وحدة نمطية جديدة وخلي الكود التالي فيها :
Option Compare Database Option Explicit Global Const mytest = "1234567890""
الان المتغير mytest اصبح معرف في كامل البرنامج بالقيمة "1234567890" ولو ذهبت في اي مكان في البرنامج واردت ان تظهر قيمة المتغير
mytest لحصلت على نفس النتيجة ونفس القيمة
انا اريد نفس الشي بس لشي اخر اريد ان اعرف مفتاح f7 بحيث اعرفه مرة واحدة واستدعيه من اي مكان بمجرد الضغط على المفتاح فقط دون اعادة التعريف في
كل مكان .
سوف ابحث وان شاء الله اصل إلى نتيجة واخبركم
أخي الكريم
كما قلت لك سابقا
الموضوع مرتبط بحدث ، و الحدث مرتبط بكائن
و أنت تريد التعامل مع الحدث بصورة عامة بعيدا عن الكائن ، مثلما فى تعريف الثابت . و هو فى هذه الحالة ممكن لانه غير مرتبط بكائن مثل الحدث
و مازلت لا أري ان نسخ سطر 5 مرات شاق و غير منطقي و غير منافي لمنطق البرمجة السليم :)
عموما أتمني أن تصل الي ما تريد ـ و قد عودنا الاخوة دائما علي اضافاتهم المفيدة ، و أتمني أن يوافيك أحدهم بما ترغبه ان كان ممكنا
مع تحياتي
افتح ماكرو واجعل اسمه Autokeys
ضع فيه الاوامر التي تريدها واجعل اسم الزر المراد {F3}
واربطه مع الأمر
اقتباسعموما أتمني أن تصل الي ما تريد ـ و قد عودنا الاخوة دائما علي اضافاتهم المفيدة ، و أتمني أن يوافيك أحدهم بما ترغبه ان كان ممكنا
بالفعل أعتقد ان ما ذكره د كمال هو ما تريد ، مع الشكر له
و أود توضيح أن هناك خطوة وسيطة فى إنشاء الماكرو لمن غاب عن ذهنه الموضوع مثلي
و هو كما فى الصورة

1- اذهب الي جموعة الماكرو
2- اختار ماكرو جديد
3- اضغط علي الأيقون الزي عليه أحرف xyz مثلما فى الصورة
4-سيظهر عمود جديد به اسم الماكرو
5-ضع فى العمود الزر الذي تريد استخدامه
و هذه بعض الامثلة فى التعليمات عن طريقة كتابة الزر
طريقة الكتابة ---> ما تدل عليه
^A or ^4 ---> CTRL+A or CTRL+4
{F1} ---> F1
^{F1} ---> CTRL+F1
+{F1} ---> SHIFT+F1
{INSERT} ---> INS
^{INSERT} ---> CTRL+INS
+{INSERT} ---> SHIFT+INS
{DELETE} or {DEL} ---> DEL
^{DELETE} or ^{DEL} ---> CTRL+DEL
+{DELETE} or +{DEL} ---> SHIFT+DEL6- إختار الفعل الذي تريد تخصيصه لكل زر
7- أحفظ الماكرو باسم autokeys
يمكن اضافة مجموعة من ضغطات المفاتيح و لكل منها الفعل الخاص بها كما فى الصورة
مع الشكر ثانية للدكتور كمال :)
اخي الكريم دكتور كمال نعم طريقتك جربتها ونفعت معي 100 % فجزاك الله عني كل خير .
مشرفنا الغالي محمد طاهر جزاك الله خيرا .
هذا الموضوع مغلق.
