محمد طاهر

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

4 ردود في هذا الموضوع

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

هذا الدرس سيكون عمليا ، فسنقوم سويا بعمل 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

لتنزيل المثال السابق

http://mypage.ayna.com/mtarafa/InvoicePrev.zip

و الي اللقاء فى الحلقة القادمة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ / محمد طاهر

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

يبدو أن موقع Ayna قام بحذف "المثال" ،

فهل أطمع في كرمك بأن تزودني بالمثال المذكور ولك الأجر ان شاء الله.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ / محمد طاهر

تم إنزال الملف بنجاح من الموقع الجديد ،

جزاك الله كل خير .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .