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

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

قام بنشر (معدل)

السلام عليكم

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

أضف الكود التالي في 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

 

 

 

تم تعديل بواسطه جعفر الطريبق
  • Like 1
قام بنشر

استادي الفاضل ياسر

عندما تفتح ملفا معينا ثم بعد دالك تفتح ملفا ثانيا فان الملف الثاني ينفتح في نفس برنامج الاكسيل مع الملف الاول  - دالك هو السلوك العادي للاكسيل في تعامله مع فتح الملفات ... الكود موضوع هده المشاركة هدفه هو جعل الملف الثاني (يعني الملف صاحب الكود) ينفتح لوحده في نسخة ثانية على انفراد New Excel instance .. أحيانا المستخدم لا يرغب في أن يكون أكثر من ملف واحد مفتوح

و بنفس الطريقة ادا اشتغل الكود فانه لو تم فتح الملف اليتيم أولا (يعني الملف صاحب الكود) ثم بعد دالك فتح ملفا ثانيا فان الملف الثاني ينفتح في نسخة أخرى حيث يبقى الملف الأول دائما وحيدا في الاكسيل

  • Like 2
قام بنشر

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

بارك الله فيك أستاذنا الغالي ياسر خليل أبو البراء على التساؤل المنطقي و الذي كان فعلاً يجول بخاطري ..

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

في موضوع لأحد السّادة الأعضاء الكرام حول " منع القص و اللصق و النسخ " أظنّه في الصفحة الثانية قمت بتجريب كود للأستاذ العزيز مختار حسين محمود .. و أدخلته بأحد الملفات .. فإذا بي لم أتمكن من النسخ واللصق في جميع الملفات الموجودة بجهازي .. و نسيت ذاك الكود و ذلك الموضوع .. و عشت في دوّامة البحث و تنصيب الأوفيس من جديد لكن لا حياة لمن تنادي .. إلا أنْ تذكّرتُ أخيرًا ما كنت قد فعلته .. ذهبت مباشرة إلى الملف و قمت بتعطيل الماكرو الذي قد شغّلته الخاص بمنع النسخ و القص و اللصق  .. فعادت الأمور كلها كسابق عهدها تمام التمام ..

أستاذي الفاضل جعفر الطريبق .. قمت بشرح مشكلتي فقط لتتّضحَ الرؤية .. هل تقصد مثلاً لو و ضعتُ هذا الكود أعلاه في الملف الذي سبّب ليَ الازعاج ..ما كان يحصل ما حصل ..حيث أنَّ كودَك هذا سيعزل الملف كملف خاص وحده ولا يؤثّر في بقيّة الملفات ..

بارك الله فيك مقدّمًا على التوضيح لو تكرّمت بذلك

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

5613b6181d96e____.thumb.gif.8dfe55cc1208

 

قام بنشر (معدل)

السلام عليم

يبدو أنني لم أوفق في شرح وظيفة الكود ... دعني أشرح بطريقة أخرى خطوة خطوة

1- افتح ملفا جديدا و اضف الكود اليه داخل ال  ThisWorkbook Module

2- احفظ الملف و اغلقه و اغلق برنامج الاكسيل لو كان الاكسيل لا زال مفتوحا

3- افتح الملف من جديد و اتركه مفتوحا

4- الأن افتح ملفا أخر أيا كان هدا الملف الأخر

النتيجة :  الأن لديك ملفان مفتوحان لكن عوض أن يكون الملفان مفتوحان في نسخة واحدة مشتركة للاكسل كما هو معهود ستجد أن كل ملف مفتوح لوحده في نسخة منفصلة للاكسيل خاصة به ... بمعنى أخر ستجد أن لديك في المجموع نسختان منفصلتين للاكسيل و ليس نسخة واحدة .... النسخة الأولى للاكسيل موجود فيها الملف الأول (يعني الملف صاحب الكود) و النسخة الثانية فيها الملف الثاني

لو فتحت ملفا ثالتا سيحدث نفس الشيئ و هكدا

في النهاية الغرض من الكود هو أن يكون الملف الأول يعني الملف المحتوي على الكود دائما مفتوحا وحيدا في نسخة منفصلة للاكسيل أما أي ملف أخر يفتح من قبله أو من بعده فانه سيفتح تلقائيا في برنامج اكسيل منفصل

أرجو أن يكون الشرح وافيا

 

 

 

 

 

 

 

 

 

 

تم تعديل بواسطه جعفر الطريبق
قام بنشر

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

أخي جعفر بارك الله فيك على هذا الموضوع المتميز والكود الجبار 

أخي وحبيبي بارك الله فيك على الشرح الواضح والمفهوم من أول مشاركة ولكن أساتذتنا الكرام والأفاضل لم توصل الفكرة لهم 

لأن أكسل عند تنصيبه وتثبيته في بعض الأجهزة يفتح الملفات بشكل نوافذ منفصلة عن بعضها البعض ..... هذه في الحالة الأفتراضية للعرض وهذه مرتبطة حسب نوع الكمبيوتر وكرت الشاشة

ولكن بعض الأجهزة وهذه مثل جهازي عند فتح أكثر من ملف أكسل تظهر الملفات في شريط المهام على شكل نافذة واحدة فقط فتضطر في هذه الحالة الى الذهاب في برنامج أكسل الى

أيقونة عرض ومنها الى تبويب نافذة وبعدها النقر على تبديل النوافذ والتبديل بين الملفات

وللتوضيح أكثر بالصور :

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

5616353485d0d____.thumb.jpg.5e08291c192d

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

56163f57bc24a_____.thumb.jpg.fec51da5087

 

أتمنى أن يكون شرحي قد أوصل فكرة كود أستاذي وحبيبي جعفر الطريبق

موضوع جميل ومتميز بارك الله فيك

في المشاركة التالية يوجد استفسار بشأن تعديل بسيط في الكود

تقبل مروري وتحياتي  

  • Like 1
قام بنشر

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

أخي جعفر لوسمحت لي وتكرمت عليي بسؤال حول طريقة عمل الكود

الكود كما فهمت من خلال طريقة التنفيذ 

عندما يكون هناك ملف أكسل مفتوح مسبقاً ونفتح الملف الذي فيه الكود يفتح الملف في نفس النافذة الذي فيها الملف الأول 

وبعدها في ظرف ثانية واحدة يغلق الملف ويفتح في نافذة جديدة كما في الصورة الأولى في المشاركة السابقة

فهل نستطيع أن يظهر الملف في نافذة جديدة من غير أن يفتح في البداية في الملف الأول بسرعة في التنفيذ

----------------------------------------------------------------------------

وهناك رأي أخر لو تكرمت عليي فكما عودتنا دائماً في وسعة صدرك وتقبلك للأراء وهو:

عند فتح ملف فيه (يوزر فورم) مفعل ونفتح ملف اكسل أخر لايفتح الإ لحتى نغلق (اليوزرفورم) 

هل توجد طريقة لفتح الملف في نافذة جديدة ويكون اليوزرفورم موجود

أتمنى وجود الحل نظراً لأهميته في العمل وجمالية الموضوع

تقبل مروري وتحياتي

قام بنشر (معدل)

السلام عليكم

أستادي الفاضل أنس دروبي

السلوك الطبيعي للاكسيل هو أن يفتح جميع الملفات داخل برنامج أكسيل واحد يعني  في نفس ال  Excel Instance

أما ما يفترض أن يحدث عندما نفتح الملف الدي يحتوي على الكود فهو كالتالي:

السيناريو الاول - عندما يكون هنالك ملف أخر أو أكثر مفتوح مسبقا قبل فتح الملف الدي فيه الكود

 بمجرد ما يفتح الملف فان الكود ينطلق و يبحث هل هنالك ملف أخر مفتوح مسبقا فلو هنالك ملف أخر مفتوح فان الملف صاحب الكود يغلق نفسه بنفسه ثم يفتح نفسه من جديد في نسخة جديدة للاكسيل

السيناريو الثاني-  عندما ليس هنالك أي ملف أخر مفتوح مسبقا

بمجرد فتح الملف فان الكود يبدأ بمراقبة الحدث Application_NewWorkbook  و حدث  Application_WorkbookOpen بحيث عندما يتم لاحقا فتح ملفا جديدا فان الملف الجديد يغلق نفسه ثم ينفتح نفسه لكن في نسخة جديدة للاكسيل

النتيجة المفترضة :

في كلا السينارهات الملف الدي فيه الكود يبقى دائما مفتوحا على انفراد في نسخة لوحده فقط و هدا هو المطلوب

استادي أنس دروبي .. هل جربت الكود و أعطى النتيجة المطلوبة ?

أما في ما يخص مسألة كون الاكسيل يفتح الملفات في شكل نوافد منفصلة عن بعضها البعض كما تفضلت فان هد أمر أخر لا صلة له بما نتحدث عنه هنا لأن رغم انفصال نوافد الملفات الا أن الملفات تكون كلها مفتوحة في نفس نسخة الاكسيل  أما ما يفعله الكود هو اجبار الملفات أن تكون مفتوحة في نسخ منفصلة لبرامج الاكسيل ... هنالك فرق بين ال Workbook.Windows  و الApplication Instances

هنالك شيئ واحد لم انتبه اليه و لم أخده بعين الاعتبار عند كتابة الكود هو في حالة وجود ملف Personal.xls  او ملف Addin.xla مفتوح يمكن للكود أن يفشل في تحقيق المطلوب ... لاحقا سأعدل الكود ليأخد هده الحالة في عين الاعتبار

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

في ما يتعلق بسؤالك عن فتح ملف أخر بينما اليوزرفورم مفعل فهل تقصد أن تفتح الملف الأخر عبر كود في اليوزرفورم أم مادا ... السؤال غير واضح لي يا أستادي الفاضل  ... حسب معلوماتي و تجربتي فان وجود يوزرفورم مفعل لا يمنع من فتح ملف أخر بطريقة مباشرة ادا كان الفورم مفعلا بطريقة Modeless أو عن طريق الكود سواء كان الفورم مفعلا بطريقة  Modeless  أو Modal

أرجو التوضيح اكثر

تم تعديل بواسطه جعفر الطريبق
  • Like 1
قام بنشر

السلام عليكم 

استاذي وحبيبي جعفر الطريبق بارك الله فيك علئ الشرح الوافي 

قمت بالتأكيد بتجربة الكود واعطئ النتيجة المفترضة في الموضوع 

بالنسبة لسؤالي حول اليوزر فورم المفعل يمكن لم اوصل الفكرة لكم بشكل كامل 

هي كالاتي:

عندما يكون هناك ملف اكسل مفتوح ويوجد بداخله يوزر فورم شغال علئ شاشة الكمبيوتر ومفعل.

نريد ان نفتح ملف اكسل اخر فلانستطيع ان نفتحه الا لحتئ نغلق الفورم وبعدها ينفتح بشكل طبيعي 

فهل توجد طريقة ان نجعل اكسل دائما يفتح الملفات علئ شكل منفصل 

هذا كان طلبي حول الموضوع 

ارجو الرد وعرض الفكرة 

قام بنشر

الله يبارك فيك أخي وأستاذي ياسر خليل 

صحيح هذا هو المطلوب بكل معنى الكلمة قمت بتعديل خصائص الفورم كما ذكرت 

وفتحت ملف أخر أثناء ظهور الفورم وفتح واشتغل بشكل صحيح 

بارك الله فيك على المشاركة الرائعة 

تقبل مروري وتحياتي

  • Like 1
  • 4 years later...
قام بنشر

السلام عليكم 

لا اعرف كيف اعبر عن اعجابي بالكود والتفكير بارك الله فيك اخي الكريم 

ولكن هل من طريقة لعمل الكود مع الملفات  Personal.xls  او ملف Addin.xla  لان الكود لا يعمل معهم بالفعل 

شكرا علي المجهود المثير للاعجاب

  • 10 months later...
قام بنشر

وعندما نسخت الكود ووضعته فى module
بنفس طريقة شرح استاذنا جعفر الطريبق  وخرجت من الملف وجدته يعطى رسال خطاء والجزء الاول من الكود ملون باللون الاحمر ولا يريد ان يعمل
هذا هو الجزء باللون الاحمر(  Private WithEvents oAppEvents As Application)
وهذه رسالة الخطاء التى تظهر عند فتح الملف (compile error only valid in object module)

فهل هناك حدث معين لكى يعمل الكود من خلاله
وشكراً للاهتمام مسبقاً

السلام عليكم

عذراً ليس لاعادة الطلب والالحاح مرة اخرى ولكنى فقط اريد معرفة كيف اجعل هذا الكود يعمل عندى

vbaبمعنى اين يتم لصقه داخل نافذة

لان الملفات التى اعمل عليها تحتوى على يوزرفورم واعتقد ان هذا الكود سيحل المشكلة ولكنى لا اعرف اين مكانه فى النافذة
هل يوضع فى ماكرو مستقل ولكن كيف سيعمل على الملف
 كما هو موضح الاستاذ جعفر الطريبقThisWorkbookام يوضع فى 

انا جربت ولكن يعطى رسالة خطاء
وشكراً

 

قام بنشر

استاذ احمد بدره  شكراً لاهتمام حضرتك ونفذت المطلوب ولكن بمجرد فتح ملف اخر ظهرت هذه الرسالة

" microsoft excel is waiting for another application to complete ole action "

فهل هناك خيارات فى اعدادت الاكسيل يجب ان اقوم بها

وشكراً لحضرتك

قام بنشر

أستاذ / خالد عوده  

ممكن تكون المشكلة أنك بعد إدخال الموديولات لم تغلف الملف

فلابد بعد وضع الموديولات حفظ الملف وإغلاقة ثم معاودة فتحه

والملف الذي رفعته في المشاركة السابقة باسم تجربة كان يعمل لدي بدون أي مشكلة

 

قام بنشر

أستاذ / احمد بدره

انا نفذت خطوات الاستاذ جعفر الطريبق

ولكن سؤال "هل ممكن تكون مشكلة الملف لما بفتح ملف يبدء ييوزرفورم باسم مستخدم وكلمة سر فيعطى هذا الخطاء

انا جربت ملف "نجربة" مع ملفات لا تبدء بيوزرفورم الادخال فتم تنفيذ الكود

ولكن عندما وضعته فى ملف به فورم الادخال ظهرت المشكلة مرة اخرى

وشكراً مرة اخرى لاهتمام حضرتك

قام بنشر

أستاذ / خالد عوده  

ممكن تكون المشكلة لديك في إعدادات مركز التوثيق

من قائمة ملف اختر خيارات  اذهب إلى مركز التوثيق  ثم اختر إعدادت مركز التوثيق في الجهة المقابلة  تظهر رسالة مركز التوثيق اختر منها إعدادات الماكرو

من إعدادت الماكرو اختر  تمكين كافة إعدادت الماكرو ( غير مستحسن يمكن أن ينم تشغيل تعليمات برمجية خطيرة )

واختر  اسفلها الثقة في الوصول  إلى كائن مشروع VBA

 

image.png

image.png

قام بنشر

أستاذ / احمد بدره

اشكر حضرتك جداً جداً جداً لاهتمامك

ولكن وجدت الخطاء فى حدث 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.

زائر
اضف رد علي هذا الموضوع....

×   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