اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

قام بنشر

اخواني كل عام وانتم بخير واسمحو لي ان اهنئكم والامة الاسلامية بقدوم شهر الخير والمحبة جعله الله شهرا مباركا طيبا لكم ولعائلاتكم ولاحبتكم...ولاخواننا ادارة واعظاء وزروار هذا المنتدى ....

هذا الكود كما هو واضح لايقاف عملية النسخ والقص والصق .....هل يتكرم احد اخواننا بشرح السطر الاول من الكود اي من بعد كلمة برايفت وبالاخص كلمة

(ByVal Target As Range) وماذا يحدث لو قمنا بالغائها او قمنا بتغيرها ..ولكم جزيل الشكر

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.CutCopyMode = False

Application.CellDragAndDrop = False

End Sub

قام بنشر

أخي عامر

السطر الأول المبدوء بكلمة Sub تعني إجراء ويتم تنفيذ هذا الإجراء مع الحدث SelectionChange أي تغيير التحديد بمعنى آخر أنت تقف في الخلية A1 ثم عند الضغط على Enter تكون بذلك قد غيرت مكان الخلية المحددة من A1 إلى A2 فيتم تنفيذ الكود

أما ما بين الأقواس فتعريف بالمتغير Target أي الخلية المستهدفة ويتم التعامل مع هذا النوع من المتغيرات على أنه من النوع Range لأنه يعد نطاق

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

أما السطر الثالث فواضح أنه يلغي عملية السحب بمقبض التعبئة

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

هو السطر ده معناه بس خلاص (خلاص الكلام يا حاج عامر)

قام بنشر

أخي عامر

السطر الأول المبدوء بكلمة Sub تعني إجراء ويتم تنفيذ هذا الإجراء مع الحدث SelectionChange أي تغيير التحديد بمعنى آخر أنت تقف في الخلية A1 ثم عند الضغط على Enter تكون بذلك قد غيرت مكان الخلية المحددة من A1 إلى A2 فيتم تنفيذ الكود

أما ما بين الأقواس فتعريف بالمتغير Target أي الخلية المستهدفة ويتم التعامل مع هذا النوع من المتغيرات على أنه من النوع Range لأنه يعد نطاق

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

أما السطر الثالث فواضح أنه يلغي عملية السحب بمقبض التعبئة

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

هو السطر ده معناه بس خلاص (خلاص الكلام يا حاج عامر)

الله ينور ياعم ياسر ...اشكرك على هذا الشرح لكن اخي ياسر انا اقصد (ByVal Target As Range) وتحديدا (ByVal) ماذا تعني وماذا يحدث لو قمنا بالغائها او قمنا بتغيرها ..ولكم جزيل الشكر

قام بنشر

منقول

في هذا الدرس سنتعرف على الفرق طرق تمرير البيانات بين الاجراءت و التي تتمثل في الأساس في طريقتين :

-التمرير بالقيمة By Value باستخدام ByVal.

-التمرير بالمرجع By Refrence باستخدام ByRef.

عند تمرير قيمة إلى إجراء ما يوجد 4 حالات يمكن أن تصادفنا:

1/ أن يكون المتغير المرسل من النوع ذو القيمة value Type و يكون الاجراء يستقبل بالقيمة ByVal.

2/ أن يكون المتغير المرسل من النوع المرجعي Refrence Type و يكون الاجراء يستقبل بالقيمة ByVal.

3/ أن يكون المتغير المرسل من النوع ذو القيمة value Type و يكون الاجراء يستقبل بالمرجعByRef.

4/ أن يكون المتغير المرسل من النوع المرجعي Refrence Type و يكون الاجراء يستقبل بالمرجع ByRef.

قبل شرح الفرق بين هذه الحالات الأربع يجب أن تعرف أنني عندما أتحدث عن الأنواع ذات القيمة فإني أقصد الأنواع المعرفة من سجلات Structures باستثناء الأنواع الأساسية Primitiv Types (Integer,Double...)، صحيح أنها من الأنواع ذات القيمة إلاّ أنها تختلف قليلا عن الأنواع المعرفة من Structures في ما يخص تمرير البيانات بين الاجراءت.

أما المتغيرات المرجعية فأقصد بها كل المتغيرات المعرفة من الفئات Classes.

1/تمرير متغير من النوع ذو القيمة إالى إجراء يستقبل بالقيمة:

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

2/تمرير متغير من النوع المرجعي إلى إجراء يستقبل بالقيمة:

في هذه الحالة يقوم المترجم بانشاء مؤشر جديد في القسم Heap يشير إلى نفس الكائن الذي يشير إليه متغير المرسل أي يقوم بانشاء نسخة من المؤشر و ليس الكائن.إذا جعلنا هذا المؤشر الجديد يشير إلى كائن آخر فإن المتغير الأصلي لن يتأثر بهذا بل سيبقى مشيرا إلى نفس الكائن.لكن الاجراء بإمكانه تغيير قيمة الكائن.

الخلاصة: يمكن للاجراء تغيير قيمة الكائن لكن لا يمكنه تغيير الكائن الذي يشير إليه المتغير.

3/تمرير متغير من النوع ذو القيمة إلى إجراء يستقبل بالمرجع:

في هذه الحالة يقوم المترجم بانشاء مؤشر يشير الى الكائن المرسل و يتعامل مع هذا الكائن من خلال هذا المؤشر و ليس مباشرة كما الحال عادة مع المتغيرات ذوات القيمة Value Types. و هنا يحدث ما يسمى بالصندقة Boxing و هي عملية اسناد متغير من النوع ذو القيمة إلى متغير مرجعي و هي عملية بطيئة و يجب تفاديها كل ما أمكن.

4/تمرير متغير من النوع المرجعي إلى اجراء يستقبل بالمرجع:

هنا لا يقوم المترجم بانشاء نسخة من المؤشر إنما يقوم يتعامل مباشرة مع المؤشر المرسل و بذلك يمكنه ليس فقط تغيير قيم الكائن المرسل اليه إنما أيضا يمكنه جعله يشير إلى كائن آخر.

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

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