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

إلغاء زر إغلاق التطبيق Excel Application Close Button


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

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

إخواني وأحبابي في الله

هذا الموضوع من فترة كنت أبحث فيه وأتذكر أن هناك من طلب مثل هذا الطلب ، كما أنه يوجد موضوع بالمنتدى في الأيام الأخيرة لا أتذكره يخص إغلاق التطبيق وكيفية منع الإغلاق عن طريق زر الإغلاق الخاص بالتطبيق ، ووجدت زخم من الأكواد ، ومتاهات إلخ ...

فقررت عمل موضوع لإنهاء الأمر والقضاء عليه بهدوء .. بأكواد بسيطة جداً بعيداً عن الزخم الغير مرغوب فيه والتعقيد الذي لا أحبذه في كثير من الأحيان

ففي البساطة لو تعمقت في المسألة ، ستجد دائماً الحلول اليسيرة التي قد لا تخطر على بال الكثيرين

 

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

Public CloseMode As Boolean

Sub CloseMe()
    CloseMode = True
    ThisWorkbook.Save
    Application.Quit
End Sub

السطر الأول دا إعلان (بس مش في التليفزيون ولا إعلان على مواقع الانترنت :wink2:) دا إعلان في مشروع المصنف VBA Project ولا يخص الموديول فقط ، بل هو إعلان عاااااااااااااااااااااااااام أي أنه يمكن التعامل معه في أي موديول (سواء موديول عادي أو موديول ورقة عمل أو موديول المصنف أو موديول الفورم)

المتغير اللي بيتم الإعلان عنه اسمه CloseMode ونوعه (يا إما ذكر يا إما أنثى) ..( True أو False)

 

الإجراء المسمى CloseMe (والترجمة اقفلني .. والكلام ليس لي .. لأنك لو قفلتني مش هنزل الموضوع ده >> إنما المتحدث هنا هو الإكسيل .. فالإكسيل بيقولك اقفلني شكراً .. بس متقفلنيش من زر الإغلاق ..ابعد عن زر الإغلاق وغني له) :yes:

أول سطر في الإجراء بيخلي المتغير العام قيمته True

وتاني سطر بيحفظ المصنف والتالت بخرج من التطبيق وبس خلاص دي قفلة الكود End Sub

تقريبا دي اختصار هند صبري (إند صب) :blink:

 

دا الجزء الأول .. انتهينا منه

***************************

شوية نجوم عشان الناس تصحصح تاني وتركز في الجزء التاني (كأننا في مسلسل مهند ونور)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not CloseMode Then
        Cancel = True
        MsgBox "Please Use The button To Close This File"
    End If
End Sub

الجزء ده بيوضع في حدث المصنف ..

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

الأسطر عبارة عن جملة شرطية بتقول ايه : (نركز ونصحى عشان أنا هنام منكم أهو)

لو المتغير العام CloseMode منفي .. يعني قيمته Fasle

وممكن نكتب الشرط بالشكل ده

If CloseMode = False Then

واحد هيسأل طيب لو كانت قيمة المتغير True مش كدا ممكن نستخدم زر الإغلاق ؟؟؟

أقوله صحيح .. بس المتغير العام القيمة الافتراضية له False ..

أول ما نفتح المصنف أي متغير بتكون قيمته الافتراضية 0 مثلاً لو كان متغير من النوع Long ، أو فراغ "" لو كان المتغير String ، أما القيمة الافتراضية للمتغير Boolean يا ناس يا حلوين هي القيمة False

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

وطبعاً زي ما قلت القيمة الافتراضية False بالتالي بالتالي وأكيد هينفذ باقي الكود

باقي الكود .. السطر Cancel = True

معناها الغي عمل زر الإغلاق ، ومش بس كدا .. أنا مش هسيبك تضرب أخماس في أسداس وتقول نسخة الأوفيس خربت عندي :wub: .. لا أنا هظهر لك رسالة عشان تتأكد إن النسخة مخربتش :rol:

الرسالة بتقول : روح يا ولدي استخدم الزر اللي ياسر خليل عمله في ورقة العمل ، عشان زر الإغلاق بتاع التطبيق ، سعادته ياسر بيه لعب في أساسه وعطله (أصلي من النوع المعطلاتي) :yes:

وطبعاً زي ما اتعودنا من الأخ شعبولة إننا نقفل ، فالشرط اللي بدأناه كمان لازم يقفل بـ End IF ..

زي بس خلاص بتاعة شعبولة

 

** نقطة أخيرة : واحد سامعه بيفكر (على فكرة هو متكلمش هو لسه بيفكر ..) دلوقتي لو عايز أقفل من زر الإغلاق مع وجود الكودين دووول أعمل ايه ؟؟

الإجابة : بسيطة جداً

روح واعمل إجراء فرعي وخلي قيمة المتغير العام CloseMode تساوي True ( وبكدا تقدر تستخدم زر الإغلاق مرة أخرى)

Sub EnableCloseButton()
    CloseMode = True
End Sub

ونفذ الإجراء الفرعي ده .. ضع مؤشر الماوس داخل الإجراء الفرعي وانقر Run أي تنفيذ الإجراء الفرعي ، أو F5 من لوحة المفاتيح ...

تقدر دلوقتي تقفل من زر الإغلاق عادي لأنك جعلت قيمة المتغير العام CloseMode تساوي True

 

وأقفل أنا كمان موضوعي بالقفلة المعروفة بالنسبة لي ..:cool:

دمتم على طاعة الله ، ولا تنسونا من صالح دعائكم :fff:

 

حمل الملف من هنا

 

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

أخي وحبيبي في الله محمد الريفي الغائب عن العين الحاضر في القلب دائماً ..

لا تحرمنا من تواجدك معنا بالمنتدى ....

مشكور على مرورك الطيب العطر ، وجزيت خيراً بمثل ما دعوت

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

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

بارك الله فيك أستاذنا القدير ياسر خليل أبو البراء .. فعلاً ملف بأكواد غير معقّدة ..كنت أبحث عن هكذا حلول بسيطة و فعّالة ..جزاك الله خيرا و زادها بميزان حسناتك

                                                                             فائق إحتراماتي

تم تعديل بواسطه عبد العزيز البسكري
  • Like 2
رابط هذا التعليق
شارك

وعليكم السلام أخي وحبيبي عبد العزيز

الحمد لله أن وجدت بغيتك ها هنا ... جزيت خيراً بمثل ما دعوت لي

تقبل تحياتي

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

السلام عليكم أخي الحبيب أبو البراء ...درس رائع خفيف الدم ...حلقات بحث مفيدة وهامة...نتنقل في جامعتنا من تعليم الفورم...إلى تعليم الvba..ثم جديد أستاذنا الحبيب ياسر أبو البراءDisable Application Close Button أو زر  منع إغلاق التطبيق...جزاكم الله خيرا"... والسلام عليكم...

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

أخي الغالي المتميز رغم أنه ما زال في بداية الطريق ياسر العربي

أبي وحبيبي في الله أبو يوسف صاحب الأنامل الذهبية في صياغة العبارات والكلمات

يشرفني مروركما الكريم وجزيتما خير الجزاء

تقبلا تحياتي

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

ما شاء الله تبارك الله عليك يا أخى الحبيب الغالى / ياسر خليل

دائما متألق ومبدع وتأتى بكل ما هو جديد ومفيد

ربنا يبارك فى حضرتك ويديم عليك الصحة والعافية

جزاك الله خيرا

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

أخي الحبيب ياسر فتحي البنا

التألق في الموضوع هو مرورك العطر به

جزيت خير الجزاء على دعائك الطيب المبارك

 

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

اود ان اضيف شيئا  وهي مشكلة الاخ الذي طرح الموضوع

وهو في الحدث

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
If Sheets(1).Range("a1").Value = 0 Then
Cancel = True
Else
Cancel = False
End If
End Sub

الموضوع بسيط في زر اغلاق اللي هو مصممه مجرد يغير قيمة

Sheets(1).Range("a1").Value = 0

يخليها اي قيمة تانية وهيقفل عادي خالص

Sheets(1).Range("a1").Value = 1
 Application.Quit

 

وشكراااااااااااااااااااااااا

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

أخي ياسر العربي

بارك الله فيك على الإضافة الجميلة

صراحةً لا أحبذ التعامل مع ورقة العمل عند التعامل مع الأكواد إلا للضرورة ..بمعنى أنك حجزت خلية في ورقة العمل لإتمام المهمة ..بينما يمكن إنجاز المهمة بدونها

نقطة أخرى أنت غيرت قيمة الخلية A1 إلى 1 .. بعدها من المفترض أن تقوم بالحفظ أم أن الحفظ غير ضروري وفي حالة الحفظ سيحفظ القيمة 1 في الخلية .. عند فتح المصنف مرة أخرى ستضطر إلى وضع سطر في حدث فتح المصنف ليجعل القيمة صفر مرة أخرى ..

 

هل توافقني الرأي أيها الأخ الحبيب؟

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

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

اوافقك الرائ تماما كلما بعد الكود عن قيم داخل خلايا كان افضل ناهيك عن التعديلات التي تحدث علي الشيتات فنتجنب تغيير قيم واسما ء ذاخل اي شيت او خليه .   تقبل مروري الغلس معلشي

  • 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