![]() |
برنامج اكسل و تطبيقات الفيجوال بيزيك - الدرس الثالث 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
=================================================