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

الصـقر

الخبراء
  • Posts

    1,836
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    21

كل منشورات العضو الصـقر

  1. الطريقه الٍسادسه :- تعبئه الكمبوبوكس باستخدام الحلقه التكراريه For Each (طريقه احترافيه) لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر شاهد الصوره مثال :- مطلوب تعبئة الكمبوبوكس 1 بالبيانات المظلله باللون الاخضر هنعمل الكود التالى With ComboBox1 For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value Next End With نشرح الكود ونمشى وحده وحده ونشوف ازى تم كتابته بالسطر الاول استخدمنا With ComboBox1 يعنى بنقول للكود الشغل بتاعنا هيكون مع الكمبوبوكس 1 ( الكمبوبوكس المطلوب تعبئته ) وطبعا طالما فتحنا With يبقى لازم نقفلها بــ End With زى كدا With ComboBox1 End With السطر التانى استخدمنا الحلقه التكرارية For Each وسميت الحلقه بأسم Data (وممكن تسميها اى اسم او احرف اخرى كما يحلو لك ) Data موجوده فى اى نطاق قلتله موجود فى النطاق من A2 الى اخر خلية بها بيانات فى العمود A ( وطبعا عرفنا ازاى قبل كدا نعرف اخر صف به بيانات فى اى شيت وفى اى عمود ) وكدا الحلقه التكرارية هتبدأ تلف على كل خليه فى النطاق المذكور بدأ من الخلية A2 وطبعا لازم نقفل الحلقه بـ Next For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) Next فلحلقه لما تبدأ هيكون Data = A2 Next الكود هيروح للخليه اللى بعدها Data = A3 Next الكود هيروح للخليه اللى بعدها Data = A4 Next الكود هيروح للخليه اللى بعدها وهكذا حتى يصل الى اخر خليه بها بيانات بالعمود وهى A11 كدا الحلقه بتلف بدون فائده او بالادق بدون مهمه تنفذها مجرد فقط انه بيلف انا عايز استفيد من الفه بتاعته دى فنعمل ايه هقوله وانت بتلف اعمل حاجتين خلى Data اللى هى فى اول لفه هتكون قيمتها A2 دخلها فى العمود الاول للكمبوبوكس ( ملحوظه العمود الاول فى الكمبوبوكس بيكون رقمه 0 والخليه المجاورة لها بالعمود B اللى هى B2 دخلها بالعمود الثانى بالكمبوبوكس ( ملحوظه العمود الثانى بيكون رقمه 1 ) وهكذا وهو بيمر على كل خليه بالنطاق هيعمل كدا .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value ترتيب الاعمده فى الكمبوبوكس بيدأ من 0 وكذالك ترتيب الصفوف بيدأ من 0 AddItem هى العمود رقم 0 فى الكمبوبوكس والعمود ده يساوى Data اللى هى كل خليه هتمر فيها الحلقه اللى هى اسماء العملاء بالعمود A والعمود رقم 1 فى الكمبوبوكس هو (List(.ListCount - 1, 1. هيظهر فيه كود العميل اللى بالعمود B (رقم العمود , صفوف الكمبوبوكس)List. صفوف الكمبوبوكس بتبدأ من 0 زى ما قلت علشان كدا قلت ان صفوف الكمبوبوكس - 1 **** ListCount - 1. طيب العمود رقم 1 عايزين نظهر فيه الكود اللى بالعمود B بالشيت فنعمل ايه Data.Offset(0, 1).Value= هنا استخدمنا الداله offset فى اول لفه للحلقه هيكون Data = A2 فأنا بقوله انتقل من A2 بمقدار صف 0 والعمود 1 ( يعنى ايه صف 0 يعنى نفس الصف والعمود واحد يعنى تحرك وروح للعمود B اخر شئ طبعا الكود ده وقت تنفيذه انت اللى بتحدده ولكن على سبيل المثال انا عايز اكتبه فى حدث تشغيل الفورم فيكون كالتالى Private Sub UserForm_Initialize() With ComboBox1 For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value Next End With End Sub والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد وطريقه اخرى من طرق تعبئة الكمبوبوكس الطريقه القادمه هنعرف ازاى نجلب البيانات بالكمبوبوكس دون تكرار انتظرونا تقبلوا تحياتى
  2. اخى الحبيب هل تقصد ان يكون اليوزرفورم مناسب لعرض الشاشه اذا كان هذا هو طلبك شاهد المرفق تقبل تحياتى دليل حسابات _ عبد الله باقشير .zip
  3. استاذى الحبيب / اسامه البراوى شاكر جدا اهتمامك بالموضوع واضافاتك الرائعه جزاكم الله خيرا تقبل تحياتى
  4. الطريقه الخامسه :- تعبئه الكمبوبوكس ببيانات محدده فمن خلال هذه الطريقه يمكن تعبئة الكمبوبوكس ببيانات محدد يتم كتابتها بالكود يعنى لا يوجد مرجع لها بالاكسيل فى اى شيت مثال لو انت حضرتك حابب تعمل خيارين فقط للمستخدم مثلا يختار أما سند قبض أو سند صرف هنعمل الكلام ده من خلال مصفوفه شاهد الكود اولا ثم نكمل التوضيح Dim a As Variant a = Array("سند قبض", "سند صرف") ComboBox1.List = a السطر الاول بالكود هو تعريف متغير وسمناه a ( وممكن تسميه اى حرف اخر او حروف اخرى ) وقلنا ان المتغيير ده من النوع Variant Dim a As Variant طيب a اللى هى من النوع Variant عباره عن ايه لازم بقى اديها قيمه وعرفها علشان كدا كتبنا السطر التانى a = Array("سند قبض", "سند صرف") Array دى عباره عن داله من دوال VbA وهى المصفوفه ( عباره كدا عن حصاله بنجمع بها المعلومات اللى عايزينها علشان نستخدمها بعد كدا ) طيب بعد ما عرفنا a وقلنا ان a عباره عن مصفوفه وبعدين قمنا بتخزين القيم اللى عايزينها داخل المصفوفه بعد كدا عملنا فى السطر التالى قلنا ان الكمبوبوكس القائمه بتاعته تساوى العناصر اللى داخل المصفوفه ComboBox1.List = a طيب الكود ده يوضع فى اى حدث ؟ دى بقى حضرتك اللى تجاوب عليها حسب احتياج برنامجك ولكن ممكن نفترض انه يكون فى حدث فتح الفورم مثلا كالتالى Private Sub UserForm_Initialize() Dim a As Variant a = Array("سند قبض", "سند صرف") ComboBox1.List = a End Sub شاهد الصوره التاليه عند فتح الفورم يعنى باختصار كل اللى يهمه بالكود ده هو السطر التالى تقدر من خلاله تحديد البيانات المطلوب عرضها a = Array("سند قبض", "سند صرف") ممكن يكون كدا مثلا a = Array("فاتورة مبيعات", "فاتورة مشتريات", "فاتورة مردود مبيعات", "فاتورة مردود مشتريات") شاهد الصوره عند تغيير العناصر داخل المصفوفه **************************************************************************** وهذه طريقه اخرى لكتابة الكود Private Sub UserForm_Initialize() Dim a As Variant a = Array("سند قبض", "سند صرف") For i = LBound(a) To UBound(a) ComboBox1.AddItem a(i) Next End Sub بدل استعمال الخاصيه List فى تعبئه الكمبوبوكس بالعناصر اللى داخل المصفوفه قمنا باستخدام الحلقه التكراريه For للمرور على كل عناصر المصفوفه وادخالها فى الكمبوبوكس ************************************************************************************** والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد وطريقه اخرى من طرق تعبئة الكمبوبوكس تقبلوا تحياتى
  5. الاخوة الافاضل فى هذا الصرح العظيم يا شباب ده الملف بعد التطوير تم تغيير الفكره كليا وجزئيا وقمت باستخدم Match مع index لتقلل حجم المعادله مرفق ملف يمكنك كتابة اى رقم من 1 الى 10000 وشاهد التفقيط بالعربى يعنى اربع ارقام فقط وجارى تطوير المعادله لتشمل خمس ارقام يمكن نقل قاعدة البيانات اللى بتعتمد عليها المعادله الى اى ملف خاص بك ويمكن استخدام المعادله فى اى خليه مع تعديل فقط فى المعادله الخلية اللى بها الرقم تقبلوا تحياتى تـفقيط معادلات.zip
  6. الاخ الحبيب مازن زهران ما شاء الله عمل جميل ارجو منك ان تواصل الابداع جزاكم الله خيرا تقبل تحياتى
  7. يا كبير الكبير كبير من يومه هى دى الناس الحلوه ولا بلاش يبدو ان الناس مش فارق معها موضوع شروحات الفورم ده مفيش غيرك انت وابوسف والاخ عبدالعزيز البسكرى المهتمين بالموضوع علشان كدا بشكركم من كل قلبى تقبلوا تحياتى
  8. اخى الحبيب ياسر بجد روعه روعه روعه اسال الله تعالى ان يزيدك من فضله وعلمه ويديم عليك نعمة الصحه والعافيه مجرد ملحوظه صغير ليه الكمبوبوكس رقم 2 بيعرض عمود 1 فقط انا عايزه عمودين يالا شغل مخك واعرف هتعدل ايه بالظبط على فكره التعديل بسيط جدا جدا مجرد تغير رقم تقبل تحياتى
  9. مشكور يا ابوالبراء دا كدا محتاجين بنج او تنويم مغناطيسى الهدف من الملف اللى ارفقته بالمشاركة الاولى هو قلة مساحه بيانات التفقيط وكمان بتعمل على معادله واحده فقط وتقدر توظفها باى خليه يعنى عايزين نحاول نبسط الموضوع ليكون سهل الاستخدام ويكون مرن ويسهل عمله فى اى ملف تقبل تحياتى
  10. يا شباب النهارده موعدنا مع اختبار جديد يالا ورونا الهمه العاليه ورقة الاختبار هل من مشمر ؟ فين بتوع التحدى ؟
  11. يا عم ياسر مش عايزين حاجه فيها صداع عايزين حاجه بسيطه وسلسه دون تعقيد او ان البنادول عليك ميبقاش صداع وغرامة فلوس مشكور يا غالى على مرورك ومشاركتك القمة تقبل تحياتى
  12. استاذى الحبيب ابويوسف والله ما كنت اقصد انى اسبب لك حزن ومش عارف بصراحه اقول ايه لكن اللى بخاطرى انى اذكرك بأن الله تعالى اذا احب عبدأ ابتلاه واكثر الناس ابتلاء هما الانبياء فالصالحين فالامثل فالامثل اسال الله تعالى ان يفرج كرب ويردكم الى بلدكم سالمين غانمين بأذن الله تقبل تحياتى استاذى ابويوسف الملف اللى حضرتك ارفقته هو للعلامه القدير والمبدع استاذى / محمد صالح هو بيعتمد على كتابة رقم فى الخلية المحدد ويقوم بتفقيطها
  13. استاذى الحبيب ابويوسف جزاكم الله خيرا دائما سباق بالخير ودائما محفز ومشجع لى وارجوا ان اكون عند حسن ظنك بى وبخصوص تعديلك شئ مبهر ورائع وارجو المزيد من الابتكار والتطوير الملف المرفق ملف للجميع اللى عنده فكره يضيفها بلا تردد تمنياتى لك بالتوفيق والسداد فأنت المعلم ومازلت معلمنا وقدوتنا تقبل تحياتى
  14. الاخوة الافاضل فى هذا الصرح العظيم اتعلمت من اوفيسنا دائما روح الابداع والابتكار والبحث عن ما هو جديد ومفيد فدائما نبحث عن ما هو جديد حتى وان فشلنا فيكفينا شرف المحاوله ومن هذا المنطلق جاء فى بالى فكره وهى عمل تفقيط ولكن بالمعادلات مرفق ملف يمكنك كتابة اى رقم من 1 الى 1000 وشاهد التفقيط بالعربى وجارى تطوير المعادله لتشمل ارقام ما بعد 1000 ولكن حاليا هذه المعادله ممكن تنفع الاخوة المدرسين اللى بيحتاجو تفقيط درجات الطلاب بالشهادات هى تناسبهم جدا ولا يحتاجون الى تفعيل الماكرو ويكون ملف اكسيل عادى امتداد Xls حتى لا اطيل عليكم اتركم مع الملف ومنتظر اقتراحاتكم وارائكم ودعاوتكم اللى مقدرش استغنى عنها تقبلوا تحياتى تفقيط بالمعـادلات.zip
  15. استاذى الحبيب محمد الريفى والله ورجعتنا لزمان وايام زمان وليالى زمان ( مش بغنى لام كلثوم على فكره ) ايوة كدا ليه حرمنا من انسك ووجودك وابداعاتك جزاكم الله خيرا وجعل ما تقدمه فى ميزان حسناتكم وفقكم الله لما يحب ويرضى تقبل تحياتى
  16. الطريقه الرابعه :- استخدام لغة البرمجه هى بنظرى من اهم الطرق واسهلها وهى تكون من خلال البرمجه فقط ولا يمكن تنفيذها من شاشة الخصائص فى مرحله التصميم شاهد الصوره التالية هتعرف ما هى الطريقه الكود هو بشكل مكبر عباره عن سطر واحد فقط ComboBox1.RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row تعالو نفصص كل كلمة فى هذا السطر ونعرف ازاى نكتبه comboBox هو اسم الكمبوبوكس المراد تعبئته بالبيانات . تكتب من خلال جعل الكيبورد انجلش ثم نضغط على حرف ز بالعربى RowSource هى الخاصيه المسئوله عن تعبئة الكمبوبوكس بالبيانات = نكتب علامه = " نفتح قوس تنصيص " ويكتب من خلال شفت+حرف ط بالعربى Sheet1!a2 وهى اول خلية بالجدول المراد عرض بياناته فى الكمبوبوكس (ونلاحظ اننا كتبنا اسم الشيت متبوع بعلامة تعجب ! ثم اسم الخلية) : تعنى الى b اسم اخر عمود بالجدول " قفل قوس التنصيص طالما فتحنا قوس اذن لازم نقفله & علامة و أو بمعنى and Sheet1.Cells(Rows.Count, "a").End(xlUp).Row اخر خليه بها بيانات بالعمود A طيب عرفنا ازاى نكتب الكود فما هو وقت تنفيذ الكود السطر ده هيتم وضعه فى اى حدث ( والله دى بقى حضرتك اللى تحددها حسب برنامجك انت ولكن على سبيل المثال نضع هذا الكود فى حدث فتح الفورم شاهد الكود Private Sub UserForm_Initialize() ComboBox1.RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row End Sub فعند فتح الفورم وتهيئته يتم تعبئة الكمبوبوكس بالبيانات ممكن نكتبه بشكل تانى لو حابب تعرف اكتر من طريقه شوف الكود وبعدين اشرحه لك Private Sub UserForm_Initialize() Lr = Sheet1.Cells(Rows.Count, "a").End(xlUp).Row ComboBox1.RowSource = "sheet1!a2:b" & Lr End Sub قمت بعمل متغير وسميته Lr وممكن تسميها انت بأى اسم كما تحب وقلت ان المتغير ده عباره عن اخر خلية بها بيانات بالعمود A وبالتالى كتبة المصدر بتاع البيانات كالتالى sheet1!a2:b" & Lr" تم الاستعاضه بـ Lr بدلا من السطره ده Sheet1.Cells(Rows.Count, "a").End(xlUp).Row ويمكن كتابة الكود بشكل اخر ( ملحوظه هذا التنوع بالكتابه هو فقط من حيث اسلوب كتابة الكود لكن المضمون واحد) Private Sub UserForm_Initialize() With ComboBox1 .RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row End With End Sub الى هنا انتهى درس اليوم اعتقد انه بسيط وممتع يارب اكون وفقت بالشرح وتستفيدو منه عايز اشوف تجاربكم على الدرس على رابط الردود الخاص بالموضوع اتمنى لكم التوفيق وانتظرونا فى طريقه جديده قريبا بأذن الله
  17. استاذى الفاضل محمد طاهر اولا مشكور جدا لاهتمامك انا كل اللى عايز اقوله سواء عضو خبير او خبير معتمد انا لا استحقها فمجرد وجودى عضو طالب علم فى جامعه اوفيسنا هذا شرف لى وهذا الكلام يدور بخاطرى من زمان لما تم الترقيه الى عضو خبير ارجوا ان تكون وضحت وجهة نظرى لحضرتك تقبل تحياتى واحترامى وتقديرى لشخصك الكريم
  18. الطريقه الثالثه :- استخدام النطاقات المعرفه بدالة Offset فى عمل نطاق ديناميكى متغير اليكم الرابط التالى للقدير واستاذى الفاضل / محمد نصرى يشرح فيه الداله offset بطريقه رائعه http://www.officena.net/ib/topic/56588-سلسلة-تعلم-اكسل-معي-بالصوت-والصورة/?do=findComment&comment=358921 تحديدا الفيديو الثانى هو اللى مرتبط بموضوعنا وبعد ما تشاهد الفيديو ارجع لشرحى المتواضع وهتعرف ليه قلتلك افهم الداله Offset وهذا شرحى المتواضع عن الداله offset الداله Offset هى من اهم الدوال فى الاكسيل انا شخصيا لما بتعامل معها بحس انى مهندس مساحه دلوقتى هنعرف ما هى داله offset وازاى نستفيد بيها فى عمل نطاق ديناميكى معرف يتم استخدامه فى تعبئة الكمبوبوكس بالبيانات هقولك ما هى الداله offset بلغة المصطبه واحنا قاعدين كدا نشرب كوباية شاى فى الخمسينه ازاى بقى نطبق الكلام ده فى الاكسيل شوف الصوره دى الاول وبعدين نكمل زى ما شايفين بالصوره وقفت بالخلية G8 وعملت الداله offset فهى مكونه من خمس اقسام 1- reference : - وهو مرجع العمل يعنى تحديد مركز انطلاق العمل وهو كما بالصوره A2 لانها اول خلية بالجدول المظلل باللون الاخضر فأنا حدد A2 لتكون مركز انطلاق العمل 2- rows : - وهى تعنى الصفوف ومن خلالها يتم تحديد صف بداية العمل يعنى اتحرك كم صف من نقطة المركز اللى هى A2 ( هنا بالمعادله كتبت 0 يعنى لا تتحرك اى صف من الخلية A2 3- Cols: - وهى اختصار كلمة Colmuns تعنى العمود ومن خلالها يتم تحديد عمود بدابة العمل يعنى اتحرك كم عمود من نقطة المركز اللى هى A2 ( هنا بالمعادله كتبت 0 يعنى لا تتحرك اى عمود من الخلية A2 ) 2 و 3 يتم من خلالهم تحديد نقطة بداية العمل 4- height: - وهى تعنى ارتفاع ومن خلالها يتم تحديد كم صف نريده للاستخدام ( هنا بالمعادله كتبت 6 يعنى اجلب لى 6 صفوف بدأ من الخلية A2 ) 5- width: - وهى تعنى عرض ومن خلالها يتم تحديد كم عمود نريده للاستخدام ( هنا بالمعادله كتبت 1يعنى اجلب لى عمود واحد بدأ من الخلية A2 ) 4 و 5 يتم من خلالهم تحديد كم صف وكم عمود نريده للاستخدام الكلام ده هيتضح لك اكتر لانه اذا عرف السبب بطل العجب انسخ المعادله اللى كتبناه بالخلية G8 واتبع التعليمات اللى بالصوره وبكدا عرفنا نطاق شوف الخطوه اللى بعد كدا شاهد الصوره وبكدا عند عرض الفورم شاهد النتيجة واحد هيقولى وليه يا عم اللفه الطويله دى انا مش شايف فرق بينها وبين الطريقه التانية اللى شرحتها قبل كدا هى نفس الفكره فى تعريف النطاق ومن ثم كتابته فى Rowsource يعنى دلوقتى لو حبينا نضيف اسم جديد فى الخلية A8 مش هيظهر فى الكمبوبوكس وانت قلتلى انه نطاق ديناميكى يكبر ويصغر حسب الادخالات فى العمود A هقوله برافو عليك انك صاحى معايا تعالى بقى اقولك ايه الفرق بينها وبين الطريقه التانية هو انى بدل ما انا محدد عدد 6 صفوف فى المعادله offset هستعين بداله Count A وهى تعمل على عد الخلايا اللى بها كتابه فى نطاق معين =COUNTA(A2:A10000) لو عملنا المعادله دى فى اى خليه هيقوم بعد الخلايا اللى بها بيانات فى النطاق من A2 الى الخلية A10000 مثلا طبعا النتيجة طبقا للصوره السابقه هتكون 6 ولكن لو قمت باضافه اسم جديد هتكون النتيجة 7 أذن اروح للداله Offset واتحكم فى عدد الصفوف من خلال Count A هتكون المعادله كدا =OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);1) لاحظ الفرق بينها وبين المعادله السابقه استبدلنا رقم 6 بالمعادله هننسخ المعادله دى ونروح نعدل النطاق اللى عرفناه قبل كدا وبكدا ضيف اى اسماء عملاء جديده او احذف اى اسماء موجوده وشاهد الكمبوبوكس سوف يتم عرض الاسماء الموجوده فقط دون زياده او نقصان شاهد الصوره واحد هيقولى انت كدا علمتنى ازاى اتحكم فى عدد الصفوف لتكون تلقائيه حسب عددها بالشيت طيب ازاى اتحكم فى عدد الاعمده انا شايف الكمبوبوكس بيظهر عمود 1 انا عايزه يظهر عمودين ازاى التحكم فى المعادله دى المعادله اللى موجوده دلوقتى =OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);1) وعلشان تتحكم فى عدد الاعمده غيرها الى =OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);2) اللى مركز معايا هيلاحظ الفرق بين المعادلتين فى اخر جزء من المعادله وهو عدد الاعمده غيرت بدل من عرض عمود 1 الى عمودين 2 طبعا علشان تغيرها لازم تروح الى قائمة Name Manager وتعمل تحرير للنطاق وتغير المعادله بدل من عمود واحد الى عمودين وطالما عايز تعرض عمودين متنساش زى ما قلنا قبل كدا تكتب 2 فى الخاصيه Column Count شاهد الصوره عند تغيير المعادله علشان تثبت المعلومه فى راسك لازم تجرب الكلام ده عملى بنفسك اتمنى يارب اكون وفقت بالشرح واتمنى لكم التوفيق والى لقاء اخر فى طريقه جديده من طرق تعبئة الكمبوبوكس بالبيانات
×
×
  • اضف...

Important Information