الأخ العزيز
السلام عليكم
نقلا عن الأستاذ في المنتدى/ tameromar
اليك وجهة نظره لحل المشكلة كما كتبها في اكواد VBA
ارجو ان تكون فيها الفائدة لك
حل مشكلة اعتراض حماية اورق الملف لتنفيذ الماكرو
هو الحل النهائى لهذه المشكلة والتى لايأتى بعده حلول نهائيا .
كما نعرف جميعا انه عند حماية اوراق الملف وعند تنفيذ ماكرو به بعض الاوامر يتم اعتراض تنفيذها نتيجة الحماية
ودائما الحل فى الدواء المكرر والمعاد دائما وهو رفع الحماية فى بداية عمل الماكرو ثم وضعها مرة اخرى فى نهايتة
ولكن الحل هنا فى منتدى الاكسيل لاول مرة على مستوى المنتديات .
وعلى سبيل المثال لا الحصر لهذه الاوامر التى تسبب توقف عمل الماكرو
ادراج او الغاء صفوف او اعمدة
تغير لون الخلية او لون الخط
والكثير من الاحداث الاخرى التى تتوقف بسبب الحماية .
فيلجأ البعض منا مما له دراية بالاكواد بعمل عدد 2 ماكرو منفصلين
الاول يعمل على تنفيذ الحماية
والثانى يعمل على الغاء الحماية
ثم عند تصميم اى ماكرو يقوم بوضع اسم الماكرو الاول فى بداية المكرو الذى يقوم بتصميمة
ويضع اسم الماكرو الثانى فى نهاية الماكرو الذى يقوم بتصميمة
بمعنى فى حالة اعترض الحماية يجب رفع الحماية فى بدية الماكرو
ثم اعادة وضع الحماية مرة اخرى فى نهاية هذا الماكرو
حتى يتم تنفيذ هذا الماكرو بدون اعتراض .
ولكن الاكسل وفر لنا الكثير والكثير ولكن العقبة هى عدم الوصول الى هذه المعرفة
وكثرت مشاكل اعتراض الحماية لتنفيذ الماكرو الذى يحتوى على بعض الاوامر التى اشرت اليها فى بداية الحديث
ولكن توجد اضافة لامر الحماية لم الحظ ان احدا يقوم بأستخدامها وهى الامر
كود
UserInterfaceOnly:=True
التى توضع فى امر الحماية ويمكن بذلك تنفيذ اى ماكرو بدون اعتراض مسيو اكسيل
وبخصوص هذا الامر
عند حفظ الملف تفرض الحماية كاملة وينهى عمل هذا الاستثناء
وعليه عند فتح الملف يجب الاعلان عن ان الحماية مشمولة بهذا الامر
ولذلك يجب ادراج كود الحماية بأحد هاتين الطريقتين :
اولا : اما عن طريق ماكرو التنفيذ التلقائى عند الفتح الذى ينفذ اى اوامر مدرجة به عند فتح الملف
كود
Sub AUTO_OPEN()
ثانيا : عن طريق حدث فتح الملف الاتوماتيكى الذى ينفذ اى اوامر مدرجة به عند فتح الملف
كود
Private Sub Workbook_Open()
فأذا اردنا ان يكون كود الحماية فى ماكرو الفتح (Sub AUTO_OPEN)
يكون الماكرو على هذه الصورة بفرض ان كلمة السر هى (123)
كود
Sub AUTO_OPEN()
MyPassword = "123"
For Each MySheet In ActiveWorkbook.Sheets
MySheet.Protect _
Password:=MyPassword, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True
Next MySheet
End Sub
اما اذا اراد المترسين بالاكواد بوضع كود الحماية فى حدث فتح الملف يكون على الشكل التالى
بفرض ان كلمة السر هى (123)
كود
Private Sub Workbook_Open()
MyPassword = "123"
For Each MySheet In ActiveWorkbook.Sheets
MySheet.Protect _
Password:=MyPassword, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True
Next MySheet
End Sub
بذلك يمكن تنفيذ اى ماكرو بدون اعترض
وتتجنب تكرار فك الحماية فى بداية الماكرو ثم اعادتها مرة اخرى فى نهاية الماكرو
مع تحياتى فى استخدام الاوامر التى لم نتطرق اليها قبل ذلك لاثراء معلوماتنا ومنتدانا بكنوز الاكسيل
تم تحرير المشاركة بواسطة tameromar