جعفر الطريبق قام بنشر أكتوبر 6, 2015 قام بنشر أكتوبر 6, 2015 (معدل) السلام عليكم هدا الكود ينفع اذا اردنا ان يكون ملفنا يتيما أي أن نضمن له ان يكون دائما مفتوحا على انفراد في نسخة منفصلة لبرنامج الاكسيل .. كنت قد كتبت هدا الكود قبل سنين و الأن أدخلت عليه بعض التحسينات المهمة أضف الكود التالي في ThisWorkbook Module : لكي يشتغل الكود ينبغي أولا حفض الملف بعد اضافة الكود ثم اغلاقه ثم اعادة فتحه Option Explicit Private WithEvents oAppEvents As Application Private oWb As Workbook Private Sub Workbook_Open() Dim oNewApp As New Application On Error GoTo errHandler If Workbooks.Count > 1 Then Application.DisplayAlerts = False Me.ChangeFileAccess xlReadOnly oNewApp.Workbooks.Open Me.FullName oNewApp.Visible = True Me.Close False End If Set oAppEvents = Application errHandler: Set oNewApp = Nothing Application.DisplayAlerts = True Application.EnableEvents = True End Sub Private Sub oAppEvents_NewWorkbook(ByVal Wb As Workbook) Dim oNewApp As New Application Wb.Close False oNewApp.Workbooks.Add oNewApp.Visible = True Set oNewApp = Nothing End Sub Private Sub oAppEvents_WorkbookOpen(ByVal Wb As Workbook) If Wb Is Me Then Exit Sub On Error GoTo errHandler Set oWb = Wb With Application .DisplayAlerts = False .EnableEvents = False oWb.ChangeFileAccess xlReadOnly .OnTime Now, Me.CodeName & ".CloseWB" End With errHandler: Application.DisplayAlerts = True Application.EnableEvents = True End Sub Private Sub CloseWB() Dim oNewApp As New Application oNewApp.Workbooks.Open oWb.FullName oNewApp.Visible = True oWb.Close False Set oWb = Nothing Set oNewApp = Nothing End Sub تم تعديل أكتوبر 6, 2015 بواسطه جعفر الطريبق 1
ياسر خليل أبو البراء قام بنشر أكتوبر 6, 2015 قام بنشر أكتوبر 6, 2015 أخي الغالي جعفر صراحةً لم أفهم الفكرة .. هل من الممكن إلقاء مزيد من الضوء عىلى فكرة الموضوع؟ 1
جعفر الطريبق قام بنشر أكتوبر 6, 2015 الكاتب قام بنشر أكتوبر 6, 2015 استادي الفاضل ياسر عندما تفتح ملفا معينا ثم بعد دالك تفتح ملفا ثانيا فان الملف الثاني ينفتح في نفس برنامج الاكسيل مع الملف الاول - دالك هو السلوك العادي للاكسيل في تعامله مع فتح الملفات ... الكود موضوع هده المشاركة هدفه هو جعل الملف الثاني (يعني الملف صاحب الكود) ينفتح لوحده في نسخة ثانية على انفراد New Excel instance .. أحيانا المستخدم لا يرغب في أن يكون أكثر من ملف واحد مفتوح و بنفس الطريقة ادا اشتغل الكود فانه لو تم فتح الملف اليتيم أولا (يعني الملف صاحب الكود) ثم بعد دالك فتح ملفا ثانيا فان الملف الثاني ينفتح في نسخة أخرى حيث يبقى الملف الأول دائما وحيدا في الاكسيل 2
عبد العزيز البسكري قام بنشر أكتوبر 6, 2015 قام بنشر أكتوبر 6, 2015 السّلام عليكم و رحمة الله و بركاته بارك الله فيك أستاذنا الغالي ياسر خليل أبو البراء على التساؤل المنطقي و الذي كان فعلاً يجول بخاطري .. جزاك الله خيرًا و زادها بميزان حسناتك أستاذنا القدير جعفر الطريبق على الكود الذي أراه مميّزًا حسب ما فهمته .. للفهم أكثر لو سمحت : في موضوع لأحد السّادة الأعضاء الكرام حول " منع القص و اللصق و النسخ " أظنّه في الصفحة الثانية قمت بتجريب كود للأستاذ العزيز مختار حسين محمود .. و أدخلته بأحد الملفات .. فإذا بي لم أتمكن من النسخ واللصق في جميع الملفات الموجودة بجهازي .. و نسيت ذاك الكود و ذلك الموضوع .. و عشت في دوّامة البحث و تنصيب الأوفيس من جديد لكن لا حياة لمن تنادي .. إلا أنْ تذكّرتُ أخيرًا ما كنت قد فعلته .. ذهبت مباشرة إلى الملف و قمت بتعطيل الماكرو الذي قد شغّلته الخاص بمنع النسخ و القص و اللصق .. فعادت الأمور كلها كسابق عهدها تمام التمام .. أستاذي الفاضل جعفر الطريبق .. قمت بشرح مشكلتي فقط لتتّضحَ الرؤية .. هل تقصد مثلاً لو و ضعتُ هذا الكود أعلاه في الملف الذي سبّب ليَ الازعاج ..ما كان يحصل ما حصل ..حيث أنَّ كودَك هذا سيعزل الملف كملف خاص وحده ولا يؤثّر في بقيّة الملفات .. بارك الله فيك مقدّمًا على التوضيح لو تكرّمت بذلك فائق احتراماتي
جعفر الطريبق قام بنشر أكتوبر 7, 2015 الكاتب قام بنشر أكتوبر 7, 2015 (معدل) السلام عليم يبدو أنني لم أوفق في شرح وظيفة الكود ... دعني أشرح بطريقة أخرى خطوة خطوة 1- افتح ملفا جديدا و اضف الكود اليه داخل ال ThisWorkbook Module 2- احفظ الملف و اغلقه و اغلق برنامج الاكسيل لو كان الاكسيل لا زال مفتوحا 3- افتح الملف من جديد و اتركه مفتوحا 4- الأن افتح ملفا أخر أيا كان هدا الملف الأخر النتيجة : الأن لديك ملفان مفتوحان لكن عوض أن يكون الملفان مفتوحان في نسخة واحدة مشتركة للاكسل كما هو معهود ستجد أن كل ملف مفتوح لوحده في نسخة منفصلة للاكسيل خاصة به ... بمعنى أخر ستجد أن لديك في المجموع نسختان منفصلتين للاكسيل و ليس نسخة واحدة .... النسخة الأولى للاكسيل موجود فيها الملف الأول (يعني الملف صاحب الكود) و النسخة الثانية فيها الملف الثاني لو فتحت ملفا ثالتا سيحدث نفس الشيئ و هكدا في النهاية الغرض من الكود هو أن يكون الملف الأول يعني الملف المحتوي على الكود دائما مفتوحا وحيدا في نسخة منفصلة للاكسيل أما أي ملف أخر يفتح من قبله أو من بعده فانه سيفتح تلقائيا في برنامج اكسيل منفصل أرجو أن يكون الشرح وافيا تم تعديل أكتوبر 7, 2015 بواسطه جعفر الطريبق
أنس دروبي قام بنشر أكتوبر 8, 2015 قام بنشر أكتوبر 8, 2015 السلام عليكم ورحمة الله أخي جعفر بارك الله فيك على هذا الموضوع المتميز والكود الجبار أخي وحبيبي بارك الله فيك على الشرح الواضح والمفهوم من أول مشاركة ولكن أساتذتنا الكرام والأفاضل لم توصل الفكرة لهم لأن أكسل عند تنصيبه وتثبيته في بعض الأجهزة يفتح الملفات بشكل نوافذ منفصلة عن بعضها البعض ..... هذه في الحالة الأفتراضية للعرض وهذه مرتبطة حسب نوع الكمبيوتر وكرت الشاشة ولكن بعض الأجهزة وهذه مثل جهازي عند فتح أكثر من ملف أكسل تظهر الملفات في شريط المهام على شكل نافذة واحدة فقط فتضطر في هذه الحالة الى الذهاب في برنامج أكسل الى أيقونة عرض ومنها الى تبويب نافذة وبعدها النقر على تبديل النوافذ والتبديل بين الملفات وللتوضيح أكثر بالصور : الصورة تمثل الحالة الأفتراضية لنسخ أوفيس في عرض الملفات وتمثل طريقة الكود الذي وضعه اخونا وحبيبنا جعفر: والأجهزة الأخرى تعرض ملفات أكسل في نافذة واحدة كما في الصورة ويكون التبديل بين الملفات من الايقونة المحددة باللون الاصفر: أتمنى أن يكون شرحي قد أوصل فكرة كود أستاذي وحبيبي جعفر الطريبق موضوع جميل ومتميز بارك الله فيك في المشاركة التالية يوجد استفسار بشأن تعديل بسيط في الكود تقبل مروري وتحياتي 1
أنس دروبي قام بنشر أكتوبر 8, 2015 قام بنشر أكتوبر 8, 2015 السلام عليكم ورحمة الله أخي جعفر لوسمحت لي وتكرمت عليي بسؤال حول طريقة عمل الكود الكود كما فهمت من خلال طريقة التنفيذ عندما يكون هناك ملف أكسل مفتوح مسبقاً ونفتح الملف الذي فيه الكود يفتح الملف في نفس النافذة الذي فيها الملف الأول وبعدها في ظرف ثانية واحدة يغلق الملف ويفتح في نافذة جديدة كما في الصورة الأولى في المشاركة السابقة فهل نستطيع أن يظهر الملف في نافذة جديدة من غير أن يفتح في البداية في الملف الأول بسرعة في التنفيذ ---------------------------------------------------------------------------- وهناك رأي أخر لو تكرمت عليي فكما عودتنا دائماً في وسعة صدرك وتقبلك للأراء وهو: عند فتح ملف فيه (يوزر فورم) مفعل ونفتح ملف اكسل أخر لايفتح الإ لحتى نغلق (اليوزرفورم) هل توجد طريقة لفتح الملف في نافذة جديدة ويكون اليوزرفورم موجود أتمنى وجود الحل نظراً لأهميته في العمل وجمالية الموضوع تقبل مروري وتحياتي
جعفر الطريبق قام بنشر أكتوبر 8, 2015 الكاتب قام بنشر أكتوبر 8, 2015 (معدل) السلام عليكم أستادي الفاضل أنس دروبي السلوك الطبيعي للاكسيل هو أن يفتح جميع الملفات داخل برنامج أكسيل واحد يعني في نفس ال Excel Instance أما ما يفترض أن يحدث عندما نفتح الملف الدي يحتوي على الكود فهو كالتالي: السيناريو الاول - عندما يكون هنالك ملف أخر أو أكثر مفتوح مسبقا قبل فتح الملف الدي فيه الكود بمجرد ما يفتح الملف فان الكود ينطلق و يبحث هل هنالك ملف أخر مفتوح مسبقا فلو هنالك ملف أخر مفتوح فان الملف صاحب الكود يغلق نفسه بنفسه ثم يفتح نفسه من جديد في نسخة جديدة للاكسيل السيناريو الثاني- عندما ليس هنالك أي ملف أخر مفتوح مسبقا بمجرد فتح الملف فان الكود يبدأ بمراقبة الحدث Application_NewWorkbook و حدث Application_WorkbookOpen بحيث عندما يتم لاحقا فتح ملفا جديدا فان الملف الجديد يغلق نفسه ثم ينفتح نفسه لكن في نسخة جديدة للاكسيل النتيجة المفترضة : في كلا السينارهات الملف الدي فيه الكود يبقى دائما مفتوحا على انفراد في نسخة لوحده فقط و هدا هو المطلوب استادي أنس دروبي .. هل جربت الكود و أعطى النتيجة المطلوبة ? أما في ما يخص مسألة كون الاكسيل يفتح الملفات في شكل نوافد منفصلة عن بعضها البعض كما تفضلت فان هد أمر أخر لا صلة له بما نتحدث عنه هنا لأن رغم انفصال نوافد الملفات الا أن الملفات تكون كلها مفتوحة في نفس نسخة الاكسيل أما ما يفعله الكود هو اجبار الملفات أن تكون مفتوحة في نسخ منفصلة لبرامج الاكسيل ... هنالك فرق بين ال Workbook.Windows و الApplication Instances هنالك شيئ واحد لم انتبه اليه و لم أخده بعين الاعتبار عند كتابة الكود هو في حالة وجود ملف Personal.xls او ملف Addin.xla مفتوح يمكن للكود أن يفشل في تحقيق المطلوب ... لاحقا سأعدل الكود ليأخد هده الحالة في عين الاعتبار ***************************************************************************************************************** في ما يتعلق بسؤالك عن فتح ملف أخر بينما اليوزرفورم مفعل فهل تقصد أن تفتح الملف الأخر عبر كود في اليوزرفورم أم مادا ... السؤال غير واضح لي يا أستادي الفاضل ... حسب معلوماتي و تجربتي فان وجود يوزرفورم مفعل لا يمنع من فتح ملف أخر بطريقة مباشرة ادا كان الفورم مفعلا بطريقة Modeless أو عن طريق الكود سواء كان الفورم مفعلا بطريقة Modeless أو Modal أرجو التوضيح اكثر تم تعديل أكتوبر 8, 2015 بواسطه جعفر الطريبق 1
أنس دروبي قام بنشر أكتوبر 8, 2015 قام بنشر أكتوبر 8, 2015 السلام عليكم استاذي وحبيبي جعفر الطريبق بارك الله فيك علئ الشرح الوافي قمت بالتأكيد بتجربة الكود واعطئ النتيجة المفترضة في الموضوع بالنسبة لسؤالي حول اليوزر فورم المفعل يمكن لم اوصل الفكرة لكم بشكل كامل هي كالاتي: عندما يكون هناك ملف اكسل مفتوح ويوجد بداخله يوزر فورم شغال علئ شاشة الكمبيوتر ومفعل. نريد ان نفتح ملف اكسل اخر فلانستطيع ان نفتحه الا لحتئ نغلق الفورم وبعدها ينفتح بشكل طبيعي فهل توجد طريقة ان نجعل اكسل دائما يفتح الملفات علئ شكل منفصل هذا كان طلبي حول الموضوع ارجو الرد وعرض الفكرة
ياسر خليل أبو البراء قام بنشر أكتوبر 8, 2015 قام بنشر أكتوبر 8, 2015 أخي الكريم أنس إذا كنت قد فهمت ما تقصده ..لما لا تجرب أن تغير خصائص الفورم بمعنى اجعل الخاصية ShowModal تساوي False 1
أنس دروبي قام بنشر أكتوبر 8, 2015 قام بنشر أكتوبر 8, 2015 الله يبارك فيك أخي وأستاذي ياسر خليل صحيح هذا هو المطلوب بكل معنى الكلمة قمت بتعديل خصائص الفورم كما ذكرت وفتحت ملف أخر أثناء ظهور الفورم وفتح واشتغل بشكل صحيح بارك الله فيك على المشاركة الرائعة تقبل مروري وتحياتي 1
عمرو.محمد قام بنشر نوفمبر 2, 2019 قام بنشر نوفمبر 2, 2019 السلام عليكم لا اعرف كيف اعبر عن اعجابي بالكود والتفكير بارك الله فيك اخي الكريم ولكن هل من طريقة لعمل الكود مع الملفات Personal.xls او ملف Addin.xla لان الكود لا يعمل معهم بالفعل شكرا علي المجهود المثير للاعجاب
خالد عوده قام بنشر سبتمبر 14, 2020 قام بنشر سبتمبر 14, 2020 وعندما نسخت الكود ووضعته فى module بنفس طريقة شرح استاذنا جعفر الطريبق وخرجت من الملف وجدته يعطى رسال خطاء والجزء الاول من الكود ملون باللون الاحمر ولا يريد ان يعمل هذا هو الجزء باللون الاحمر( Private WithEvents oAppEvents As Application) وهذه رسالة الخطاء التى تظهر عند فتح الملف (compile error only valid in object module) فهل هناك حدث معين لكى يعمل الكود من خلاله وشكراً للاهتمام مسبقاً السلام عليكم عذراً ليس لاعادة الطلب والالحاح مرة اخرى ولكنى فقط اريد معرفة كيف اجعل هذا الكود يعمل عندى vbaبمعنى اين يتم لصقه داخل نافذة لان الملفات التى اعمل عليها تحتوى على يوزرفورم واعتقد ان هذا الكود سيحل المشكلة ولكنى لا اعرف اين مكانه فى النافذة هل يوضع فى ماكرو مستقل ولكن كيف سيعمل على الملف كما هو موضح الاستاذ جعفر الطريبقThisWorkbookام يوضع فى انا جربت ولكن يعطى رسالة خطاء وشكراً
احمد بدره قام بنشر سبتمبر 14, 2020 قام بنشر سبتمبر 14, 2020 توضع الأكواد في حدث ThisWorkbook شاهد المرفق تجربه.xlsm
خالد عوده قام بنشر سبتمبر 14, 2020 قام بنشر سبتمبر 14, 2020 استاذ احمد بدره شكراً لاهتمام حضرتك ونفذت المطلوب ولكن بمجرد فتح ملف اخر ظهرت هذه الرسالة " microsoft excel is waiting for another application to complete ole action " فهل هناك خيارات فى اعدادت الاكسيل يجب ان اقوم بها وشكراً لحضرتك
احمد بدره قام بنشر سبتمبر 15, 2020 قام بنشر سبتمبر 15, 2020 أستاذ / خالد عوده ممكن تكون المشكلة أنك بعد إدخال الموديولات لم تغلف الملف فلابد بعد وضع الموديولات حفظ الملف وإغلاقة ثم معاودة فتحه والملف الذي رفعته في المشاركة السابقة باسم تجربة كان يعمل لدي بدون أي مشكلة
خالد عوده قام بنشر سبتمبر 15, 2020 قام بنشر سبتمبر 15, 2020 أستاذ / احمد بدره انا نفذت خطوات الاستاذ جعفر الطريبق ولكن سؤال "هل ممكن تكون مشكلة الملف لما بفتح ملف يبدء ييوزرفورم باسم مستخدم وكلمة سر فيعطى هذا الخطاء انا جربت ملف "نجربة" مع ملفات لا تبدء بيوزرفورم الادخال فتم تنفيذ الكود ولكن عندما وضعته فى ملف به فورم الادخال ظهرت المشكلة مرة اخرى وشكراً مرة اخرى لاهتمام حضرتك
احمد بدره قام بنشر سبتمبر 16, 2020 قام بنشر سبتمبر 16, 2020 أستاذ / خالد عوده ممكن تكون المشكلة لديك في إعدادات مركز التوثيق من قائمة ملف اختر خيارات اذهب إلى مركز التوثيق ثم اختر إعدادت مركز التوثيق في الجهة المقابلة تظهر رسالة مركز التوثيق اختر منها إعدادات الماكرو من إعدادت الماكرو اختر تمكين كافة إعدادت الماكرو ( غير مستحسن يمكن أن ينم تشغيل تعليمات برمجية خطيرة ) واختر اسفلها الثقة في الوصول إلى كائن مشروع VBA
خالد عوده قام بنشر سبتمبر 16, 2020 قام بنشر سبتمبر 16, 2020 أستاذ / احمد بدره اشكر حضرتك جداً جداً جداً لاهتمامك ولكن وجدت الخطاء فى حدث Sub Workbook_Open كان هناك تعارض مع الكود ومع اوامر يوزرفورم الادخال فى هذا الحدث والحمد لله عالجت الامر والكود يعمل بشكل جيد اشكر حضرتك مرة اخرى والشكر موصول لكل الاساتذة الافاضل على مجهودهم مع الجميع
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.