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

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

قام بنشر

بسم الله الرحمن الرحيم

الاخوة الزملاء فى هذا الصرح العظيم

اقدم لكم الدرس الثانى من علمنى كيف اصطاد

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

بناء على طلب الاخ الكريم / بيف الدين حسام 

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

كما هو موضح بالصور 

 

71lhay.png

 

المطلوب ترحيل الخلايا المظلله باللون الاصفر بورقه عمل (توريد) الى ورقة عمل حركة الخزينة

Qbn80L.png

 

اولا : الضغط على ALT+F11  لفتح محرر الاكواد ثم من قائمة insert  نختار مودويل جديد سيظهر لنا شاشة بيضه 

هنبداء بسم الله كتابة الكود 

Sub ترحيل()

End Sub

السطر الاول هو الاعلان عن بداية الكود sub  يلية اسم الكود وهو ترحيل  يلية () يعنى فتح قوس ثم غلقه  فبمجرد كتابة السطر الاول سوف يتم ظهور السطر الثانى وهو End sub 

أنا عايز كل واحد يكتب الكود بنفسة مش ينسخ /  من فضلك عايزك تكتب 

ثانيا : كتابة هذا السطر

Sub ترحيل()
Application.ScreenUpdating = False

End Sub

هذا السطر يعنى تثبيت الشاشه عند الترحيل ( يعنى عدم اهتزاز الشاشه اثناء تطبيق الكود  ) 

ثالثا :  ايه المطلوب هو ترحيل الخلايا المظلله باللون الاصفر بورقه عمل توريد الى ورقة عمل حركة الخزينة 

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

1GCWmN.png

ملحوظه/عند استخدم اسم شيت باى كود يفضل كتابة اسم الشيت الثابت كما هو بمحرر الاكواد  لانه احتمال تغيير اسم الشيت من (حركة الخزينة) الى (قاعدة البيانات )مثلا فى هذه الحاله لا يعمل الكود 

نرجع للكود بتاعنا ونضيف الاتى 

Sub ترحيل()
Application.ScreenUpdating = False
With Sheet4
  End With
End Sub

ما تم اضافته هو With Sheet4  كلمة With معناها الحرفى ( مع)  أى مع الشيت Sheet4 

لماذا استخدمنا Sheet4 وليس ( حركة الخزينة) لان لو كتبنا (حركة الخزينة With) وجيت حضرتك وغيرت اسم الشيت من حركة خزينة الى قاعدة البيانات مثلا  لا يتغير اسم الشيت فى محرر الاكواد فهو هيظل ثابت باسم Sheet4  وفى هذه الحاله لا يعمل الكود  لانه هيبجث عن شيت حركة الخزينة هيكون غير موجود 

لكن لو استخدمت With Sheet4 مهما تغير اسم الشيت هيشتغل الكود 

طيب اى شئ بفتحه فى الاكسيل لازم اقفله انا دلوقتى فتحت With Sheet4 اذن لا بد من قفل With بـــ  End With

رابعا : اضافه السطر التالى

Sub ترحيل()
Application.ScreenUpdating = False
With Sheet4
 
 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
End With
End Sub
 

الجديد هو هذا السطر Lr = .Cells(.Rows.Count, "D").End(xlUp).Row

عملنا متغير اسمه LR ويمكنك تغيير الى ما تريد من الاحرف حسب مزاجك حضرتك طيب وعرفناه انه عبارة عن اخر خليه بها بيانات فى عمود D   من شيت حركة الخزينة  وهى هنا كما هو بالصورة عليه الخلية D4 مكتوب فيها " رصيد افتتاحى"

واحد هيقولى مش فاهم هوضح له اكتر

مثلا عايز اقول ان  " الاستاذ الكبير العلامه ياسر خليل العبقرى" = r

فبدل كل شوية ما اكتب الجمله دى " الاستاذ الكبير العلامه ياسر خليل العبقرى "  وتاخد منى وقت استعيض عنها بى  r  فقط  / على طول الكود هيفهم معناها  

خامسا : اضافه السطر التالى

Sub ترحيل()
Application.ScreenUpdating = False
With Sheet4
  Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
.Cells(Lr + 1, "A") = [D8]
End With
End Sub
 

ما هو الجديد الجديد هذا السطر [Cells(Lr + 1, "A") = [D8.

ماذا يعنى الجزء الاول و هو.("Cells(Lr + 1, "A.   

(العمود, الصف)Cells.

الصف هو Lr+1  يعنى Lr هى اخر صف فى العمود D  من شيت حركة الخزينة فيه بيانات  ( طيب انا عايز بقى السطر اللى بعده يبقى اقول Lr+1

طيب والعمود هو A  وتم كتابته بين علمتى تنصيص "A"  ( شيفت + حرف الطاء بالكيبور)

طيب عمود A  ده عايزين يروح له التاريخ اللى بسند القبض  / والتاريخ اللى بسند القبض موجود بالخلية D8 صح 

اذن اقول [Cells(Lr + 1, "A") = [D8. 

 

وهكذا كما هو موضح بالكود يتم ترحيل كامل بيانات السند ثم نغلق With ب End With

Sub ترحيل()
Application.ScreenUpdating = False
With Sheet4
  Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
.Cells(Lr + 1, "A") = [D8]
.Cells(Lr + 1, "B") = [G7]
.Cells(Lr + 1, "D") = [D10]
.Cells(Lr + 1, "G") = [d11]
.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"
End With
End Sub

اضغط على زر الترحيل ستجد البيانات تم ترحيلها 

ارجوا من الله ان اكون وفقت فى هذا الشرح ويستفيد منه الجميع 

ان احسنت فمن الله وما توفيقى الا بالله 

وان اخطأت فمن نفسى والشيطان 

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

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

تقبلوا منى وافر الاحترام والتقدير

 

 

خزينة.zip

  • Like 7
  • الردود 93
  • Created
  • اخر رد

Top Posters In This Topic

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

ما شاء الله عليك ، أستاذي الحبيب / حسام ، زادك الله حرصاً على المسارعة في الخيرات ونفع إخوانك ، شرح بسيط وسهل ورائع 

 ، أسال الله التوفيق والسداد و إكمال هذا الموضوع الرائع .

جزاكم الله الفردوس :fff:  :fff: 

تم تعديل بواسطه محمد عبد المجيد ( أبو حمزة )
  • Like 2
قام بنشر

استاذ / محمد عبدالمجيد

يالا يا كبير فيد الاخوة كما استفد انت بقيت استاذ كبير 

المنتدى زاد عالم اسمه محمد عبدالمجيد يالا ورينى الهمه

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

شكرا على مرورك العطر وتقبل تحياتى

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

 

استاذ / محمد عبدالمجيد

يالا يا كبير فيد الاخوة كما استفد انت بقيت استاذ كبير 

المنتدى زاد عالم اسمه محمد عبدالمجيد يالا ورينى الهمه

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

شكرا على مرورك العطر وتقبل تحياتى

 

مرحب بأستاذنا 

الصقر الجريـح

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

ممكن توضيح للسطر

.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"

اخى الكريم دى معادله اصبر على رزقك متستعجلش ان شاء الله هنشرحها

قام بنشر

استاذنا الكبير

ياسر خليل

مرورك العطر شرف للموضوع وارجوا لا تحرمنا من اى اضافه

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

قام بنشر

 

استاذ / محمد عبدالمجيد

يالا يا كبير فيد الاخوة كما استفد انت بقيت استاذ كبير 

المنتدى زاد عالم اسمه محمد عبدالمجيد يالا ورينى الهمه

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

شكرا على مرورك العطر وتقبل تحياتى

 

شكر الله لك أستاذي الحبيب ، الكلام ده كبير علي ، أسأل الله تعالى أن أكون خيرا مما تظنون

 

جزاك الله خيرا ، إن شاء الله ترى البرنامج قريبا .

  • Like 1
قام بنشر

.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"

أصل المعادلة في ورقة العمل المسماة (حركة الخزينة) في الخلية E5 مثلاً هي بالشكل التالي :

=E4+G5-F5

لتحويل هذه المعادلة إلى كود يتم الإشارة للصفوف والأعمدة ...

R هو اختصار لكلمة Row بمعنى صف.

C هو اختصار لكلمة Column بمعنى عمود.

استخدمت أقواس التنصيص للإحاطة بالمعادلة التي تبدأ بعلامة يساوي.

الخلية التي بها المعادلة هي كما قلنا مثلاً E5 ، وأول خلية في المعادلة E4 ، فالسؤال هو : ما هو موقع الخلية E4 من الخلية E5؟

الإجابة : موقع الخلية E4 في الصف السابق (ولذا ستجد -1 ) لأننا نرجع للخلف ، هذا بالنسبة للصف أما العمود فهو نفس العمود ، ولذلك لم يتم إضافة أية أرقام للعمود.

بالتالي تصبح الخلية E4 في المعادلة مساوية لهذا الجزء في الكود :

 

R[-1]C

الخلية الثانية في المعادلة هي G5 ، ونسأل نفس السؤال ما هو موقع الخلية G5 من الخلية التي بها المعادل E5؟

نلاحظ رقم 5 أي أنهما في نفس الصف ، ولكن العمود مختلف .. العمود G يبعد عن العمود E بمقدار عمودين ، أي أنه إذا بدأنا العد من العمود F أي العمود الذي يلي العمود الحالي سنقول : العمود F ثم العمود G (إذاً قيمة الإزاحة هي 2)

بالتالي تصبح الخلية G5 في المعادلة مساوية لهذا الجزء في الكود :

 

RC[2]

وأترك لك النظر في الخلية F5 في المعادلة..

أرجو أن تكون الفكرة قد وصلت..

  • Like 2
قام بنشر

حبيبى واستاذى الكبير

ياسر خليل

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

انتى مصبحتش عليا النهارده وبقالى كام يوم مسمعتش صوتك بس بعد الشرح الرائع ده انا مش زعلان

تقبل تحياتى يا غالى

  • Like 1
قام بنشر

اعذرني أخي حسام

شوية مشاغل ، وبيني وبينك أنا مشغول بالمكتبة شوية لحد ما المشروع يقف على رجليه..

وفي انتظار مساهمات منك يا كبير

أرجو المساعدة في إتمام المشروع ..

وبعدين القلوب مصبحة يا كبير :yes:

تقبل صباحي :welcomeani: 

  • Like 1
قام بنشر

استاذى الفاضل

محمد الريفى

مرورك اسعدنى جدا - و ارجو منك لا تحرمنا من اضافاتك بخصوص الترحيل

تقبل منى وافر الاحترام والتقدير

قام بنشر

استاذ يبف الدين

ليه مستعجل على رزقك وحده وحده ان شاء الله تعرف كل شئ ولن نبخل عليك بما تعلمناه

هل قمت اولا بتطبيق كود الترحيل وعمله واتقانه لو دا تم 

ان شاء الله انتظر منى شرح لكيفية عمل سريال للسند تلقائى 

تقبل تحياتى

قام بنشر

 

استاذ يبف الدين

ليه مستعجل على رزقك وحده وحده ان شاء الله تعرف كل شئ ولن نبخل عليك بما تعلمناه

هل قمت اولا بتطبيق كود الترحيل وعمله واتقانه لو دا تم 

ان شاء الله انتظر منى شرح لكيفية عمل سريال للسند تلقائى 

تقبل تحياتى

 

شكرا لك اخى الصقر الجريح

لكن الاسم سيف الدين - مش عارف ليه فى المنتدى بتظهر يبف - مستخسرين فيا اللقب زى السجل المدنى

- لأنه كنايتى لأنى تمنيت أن ارزق بولد وأسميه سيف الدين - لكنهم رفضوا الاسماء المركبة فى السجل المدنى فسميته محمد

- وانا معك حتى النهاية حتى اشرب الاكواد كلها - مش الترحيل فقط

تقبل تحياتى ولا تيأس منى

قام بنشر

أستاذي الفاضل / حسام

بارك الله فيك على هذا الشرح الرائع

زادك الله علما ونورا وجعله فى ميزان حسناتك

تحياتي :fff:

  • Like 2
قام بنشر

جميل

  • Like 1
قام بنشر

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

جزيا خيرا

لكن كيف احدد له اختيار الترحيل اذا كان التوريد شيك وليس مبلغ نقدى

كذلك تحديث رقم الايصال السريال كيف تم اعداده

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

أنا الان على الطريق الصحيح بفضل ( الله ) ثم هذا الصرح العلمى الهائل

قام بنشر

الاخوة الكرام 

                اقدم لكم بقية لدرس الترحيل 

 

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

 

مما لا شك فيه ان سند القبض  اللى بصورة التالية  لابد من ادخال جميع البيانات اللى بالسند وهى المظلله باللون الاصفر 

 

 

71lhay.png

 

رقم الايصال  بالخلية [G7]
تاريخ السند بالخلية [D8]
الجهه التى تم القبض منها بالخلية [D10]
المبلغ المقبوض بالخلية [D11]

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

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

اولا: اجبار المستخدم على ادخال رقم الايصال بالخلية [G7]

هنستخدم السطر التالى بالكود 

If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub

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

Application.ScreenUpdating = False

ليصبح هكذا

Sub ترحيل()
Application.ScreenUpdating = False
If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub
With Sheet4
  Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
.Cells(Lr + 1, "A") = [D8]
.Cells(Lr + 1, "B") = [g7]
.Cells(Lr + 1, "D") = [D10]
.Cells(Lr + 1, "G") = [d11]
.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"
End With
End Sub

تعالى بقى نشرح معنى هذا السطر

If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub

هذا السطر من الكود معناه ببساطه كدا ان  لو الخلية [g7] فارغه  اكتب رساله تظهر للمستخدم تنبهه بان الخلية فارغه ويجب ادخالها و اخرج من الكود ومتكملش 

         الشىئ الذى تريد تنفيذه  then    الشرط المطلوب التحقق من وجوده   if 

استخدمنا هنا IF وذالك لعمل شرط قبل عملية الترحيل وهى كما نعرف جميعا ان iF  معناها لو  then  معناها تنفيذ 

الشرط الذى نريده كما اتفقنا من قبل هو عدم ترك الخلية [g7] فارغه اللى بيسجل بها رقم الايصال  

الكود هيقوم باختبار الشرط التالى "" =  [if [g7

"" العلامه هذا بالكود تعنى فارغ  ( فلو [g7] تساوى فارغ  نفذ  كذا كذا )

نفذ دى فى الكود هى Then وسيكون لونها بالكود ازرق 

هينفذ ايه بقى انا عايزة يظهر رساله  وهى " الرجاء ادخال رقم الايصال" ونلاحظ انها مكتوبه بين علمتى تنصيص ( تكتب من خلال شيفت + حرف ط بالكيبور)

وهينفذ ايه تانى غير الرساله هينفذ خروج من الكود ميكملش يعنى ودى بتكون exit sub  :  وبعدها كتابتها ستجد ان لونها اصبح ازرق 

لمتابعه شرح عن كتابة الرسائل فى لغة البرمجه يرجى مراجعه الرابط التالى ستجد شرح باستفاضه http://www.officena.net/ib/index.php?showtopic=57199&hl= )

 

ثانيا : عايزين نجبر المستخدم على ادخال التاريخ 

If [d8] = "" Then MsgBox "الرجاء ادخال تاريخ لسند القبض": Exit Sub

هو نفس السطر السابق بس بنختبر الخليه [d8] فيها تاريخ ام لا 

 

ثالثا : اجبار المستخدم على ادخال الجهه التى تم الاستلام منها 

If [d10] = "" Then MsgBox "الرجاء ادخال اسم الشخص الذى تم الاستلام منه": Exit Sub

رابعا: اجبار المستخدم على ادخال المبلغ المقبوض

If [d11] = "" Then MsgBox "الرجاء ادخال المبلغ المقبوض": Exit Sub

وهيكون الكود فى شكله النهائى كالتالى 

Sub ترحيل()
Application.ScreenUpdating = False
If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub
If [d8] = "" Then MsgBox "الرجاء ادخال تاريخ لسند القبض": Exit Sub
If [d10] = "" Then MsgBox "الرجاء ادخال اسم الشخص الذى تم الاستلام منه": Exit Sub
If [d11] = "" Then MsgBox "الرجاء ادخال المبلغ المقبوض": Exit Sub

With Sheet4
  Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
.Cells(Lr + 1, "A") = [d8]
.Cells(Lr + 1, "B") = [g7]
.Cells(Lr + 1, "D") = [d10]
.Cells(Lr + 1, "G") = [d11]
.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"
End With
End Sub

يعنى الكود قبل الترحيل هيعمل اربع اختبارات الاول هيمسك اول سطر بتاع رقم الايصال لو موجود ينتقل للسطر اللى بعده ولو مش موجود هبخرج من الكود ومش هيكمل وهكذا ما باقى الاسطر الين يتحقق من وجود بينات بالاربع خلايا ثم يقوم بعمليه الترحيل 

 

خامسا : هل يمكن عمليه الاختبار بسطر واحد بدلا من اربع اسطر

نعم يمكن ذالك من خلال السطر التالى 

If [g7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub

هنا تم استخدام داله OR وهى تعنى أو 

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

ويكون الكود بشكله النهائى كالتالى 

Sub ترحيل()
Application.ScreenUpdating = False
If [g7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub

With Sheet4
  Lr = .Cells(.Rows.Count, "D").End(xlUp).Row
.Cells(Lr + 1, "A") = [d8]
.Cells(Lr + 1, "B") = [g7]
.Cells(Lr + 1, "D") = [d10]
.Cells(Lr + 1, "G") = [d11]
.Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]"
End With
End Sub

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

تقبلوا منى وافر الاحترام والتقدير

  • Like 7

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