id=177

برنامج اكسل و تطبيقات الفيجوال بيزيك - الدرس الثالث

Excel & VBA applications_ Lesson no. 3

إعداد : محمد طاهر

l

الدرس الثالث :  نقل الكميات الموجودة فى عمود الاجمالي الي عمود السابق و اخلاء عمود الحالي عن طريق الكود

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

و بتشغيل هذا الماكرو يقوم المستخدم بتحديد الخلايا الموجود بها قيم الاجمالي ثم يقوم بتشغيل الماكرو عن طريق الضغط علي CRT+Q أو الاختيار من القائمة كما سبق شرحه فتظهر له رسالتان

الاولي تسأل عن عدد الاعمدة التي يبعد بها عمود السابق و تكون القيمة الافتراضية لها هي -2 أي العمود السابق (و يمكن تغييرها ) ، و الثانية تسأل عن عدد الاعمدة الموجود بها عمود الكمية الحالية و تكون القيمة الافتراضية لها هي -1 أي العمود السابق للاجمالي مباشرة

  

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

 

من قائمة Tools  اختار Macro  ثم Record New Macro

انت الآن فى وضع التسجيل

علم علي أي مجموعة من الخلايا و اختار Copy ثم علم علي خلية و اختار

 Paste Special  Values  ثم علم علي مجموعة أخري و اضغط Delete

ثم أوقف تسجيل الماكرو عن طريق الزر الظاهر امامك

 

نلاحظ ذكر أي مجموعة و أي خلية ، لأن الغرض حتي الان هو الحصول بسرعة علي الاوامر الخاصة بالنسخ و اللصق و المسح و التي سجلت لمجموعة معينة من الخلايا بعينها و تحويلها الي ماكرو يصلح للاستخدام علي أي حالة عامة

اضغط ALT+F11 لمشاهدة الكود المسجل و تفحصه جيدا و لاحظ اننا سنستخدم الكثير من مكوناته عند اعداد الماكرو المطلوب لتنفيذ نفس الخطوات علي أي مجموعة خلايا يتم اختيارها و  لصقها كقيم فقط علي خلايا أخري تبعد عنها بعدد متغير من الاعمدة ، و أخيرا مسح مجموعة أخري من الخلايا تبعد عنها بعدد آخر من الأعمدة

 

وسنستعرض فيما يلي الكود المطلوب لتنفيذ الماكرو الفعلي :

قم بتسجيل ماكرو جديد كما سبق شرحه و اختار قيمة مختصرة لتنفيذه CRT+Q  علي سبيل المثال

 

  Sub NEWINV()

 تعرف المتغيرات

 Dim MyRow As Long, Mycol As Long

 Dim PreviousCol As Integer, Coltoclear As Integer

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

  MyRow = Selection.Rows.Count

  Mycol = Selection.Columns.Count

 

التأكد من انه لم يتم التعليم علي أكثر من عمود ةو الخروج مع اعطاء رسالة فى تلك الحالة

  If Mycol > 1 Then

   MsgBox "Wrong No of Col", vbCritical, "Only one Column Allowed"

   Exit Sub

  End If

 

السؤال عن عدد الاعمدة التي يبعد بها عمود السابق و تكون القيمة الافتراضية لها هي -2

 PreviousCol = InputBox("Enter Offset Col for Previous", "no of Col to the Left", -2)

 

السؤال عن عدد الاعمدة الاعمدة التي يبعد بها عمود الحالي و تكون القيمة الافتراضية لها هي -1

 Coltoclear = InputBox("Enter Offset Col for Current", "no of Col to the Left", -1)

 

الحصول علي الفرق بين القيمتين

 colNet = -PreviousCol + Coltoclear

 

أخذ نسخة مما تم اختياره

    Selection.Copy

 جعل الخلية التي سيتم اللصق اليها Active أي فعالة

    ActiveCell.Offset(0, PreviousCol).Activate

 عمل لصق للقيم فقط بدون الفورمات

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

 

جعل الخلية التي فى أعلي عمود الحالي فعالة

    ActiveCell.Offset(0, colNet).Activate

 

احتيار مجال الحالي كله

   Range(ActiveCell, ActiveCell.Offset(MyRow - 1, 0)).Select

 

الغاء القيم الموجودة

    Selection.ClearContents

 

End Sub

=================================================