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

الصـقر

الخبراء
  • Posts

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

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

  • Days Won

    21

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

  1. استاذى الفاضل نضال الشامى جزاكم الله خيرا وجعل اعمالكم فى ميزان حسناتكم تقبل منى وافر الاحترام والتقدير
  2. الطريقه الثامنه :- تعبئه الكمبوبوكس بدون تكرار باستخدام الحلقه التكراريه For Each و المتغير Collection (طريقه احترافيه) هذه الطريقه طريقه احترافيه من حيث فكرة الكود وكتابته ولكنها غير عملية ومفيده فى البيانات ذات النطاق الكبير نظرا لاعتمادها على عدد 2 حلقه تكراريه مما يسبب البطئ فى ادخال البيانات لو كان نطاق العمل كبير لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر ولكن دون تكرارشاهد الصوره انا كل مره بالشرح بكتب الكود وبعدين اشرحه بالتفصيل المره دى انا هشرحه قبل ما اكتبه تعالو نشوف ايه اللى بيحصل ببساطه ايه المطلوب ؟ المطلوب هو ادخال البيانات اللى بالشيت المظلله باللون الاخضر ( A2:B7) اذن لازم اعمل متغير يعبر عن كل خلية بالنطاق فنعمل ايه ؟ Dim data As Range انا دلوقتى عايز العمودين دول يدخلوا فى الكمبوبوكس برضوا فى عمودين انا هعمل ان كل بيانات عمود عباره عن مجموعه بمعنى ايه الخلايا من A2 الى اخر خلية بها بيانات فى العمود A ( دى تكون مجموعه اولى ) والخلايا من B2 الى اخر خلية بالعمود A ( دى تكون مجموعه تانية ) طيب علشان اعلن عن مجموعه يبقى لازم اعمل كدا Dim data As Range Dim group1 As Collection Dim group2 As Collection عرفت متغير وسميته group1 وقلت ان المتغير ده من النوع Collection ( وCollection تعنى مجموعه ) طبعا زى ما اتفقنا انى عايز اعرض عمودين يبقى لازم اعرف كل عمود فى مجموعه فأنا محتاج اعرف متغير لكل مجموعه لذالك عملت group1 و group2 طيب group1 و group2 عباره عن ايه ؟ عباره عن مجموعات جديده اذن لازم استخدم set لتحويل قيمة المتغير الى كائن طيب أزاى ؟ بالشكل ده شوف الكود Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection حولت قيمة المتغير group1 الى كائن يساوى مجموعه جديده وايضا حولت قيمة المتغير group2 الى كائن يساوى مجموعه جديده ********************************************************************************************* محلوظه مهمه جدا انا عملت مجموعتين لاننا عايزين نقوم بتعبئة الكمبوبوكس ببيانات العمودين A و B لكن لو حضرتك عايز عمود A فقط اذن تعرف مجموعه وحده فقط يعنى على حسب عدد الاعمده هتعرف مجموعات *********************************************************************************************** طيب دلوقتى عملنا بالكود مجموعتين عايزين ندخل فيهم البيانات بقى اللى بالشيت فنعمل ايه ؟ هنستخدم الحلقه التكراريه For Each ونسمى الحلقه باسم Data ونقول ان الحلقه تبدأ من A2: الى اخر خليه بها بيانات وطبعا اتكلمنا بالتفصيل قبل كدا عن الحلقه For Each راجع الدرس السابق تعالو نشوف الكود وصل لوين ؟ Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) Next data كدا عملنا الحلقه والحلقه هتلف من خلال Next بس كدا هتلف على الفاضى مجرد بس هتمر على الخلايا اللى بالنطاق وتقولها السلام عليكم ان مش عايز سلامات وطيبون دلوقتى انا عايز استفيد من لفتها ومن عملها عايز اقولها ان group1 المجموعه الاولى تساوى العمود A اللى هو Data وعايز ان group2 المجموعه الثانيه تساوى العمود B اللى هو بجوار الـ Data ( من خلال offset) فالكود هنضيف فيه ايه ؟ شوف الكود Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) group1.Add data group2.Add data.Offset(0, 1).Value Next data قلنا ان group1 قم بأضافه data ( اللى هى خلايا العمود A) من خلال Add وكذالك group2 قم بأضافه خلايا العمود B واحد هيقولى بس كدا هياخد كل البيانات اللى بالنطاق حتى وان كانت مكرره وانت قلتلى ان الطريقه دى مش هيكرر البيانات فى الكمبوبوكس هو انت بتضحك عليا هقوله يا عم اصبر شوية انا عايز اديك الطريقتين لو عايز البيانات زى ما هى حتى وان كانت مكررة يبقى الكود السابق كدا تمام ولكن لو مش عايز تكرار بسيطه جدا هنعمل اضافه صغيره جدا جدا جدا شوف الكود On Error Resume Next Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) group1.Add data, data.Text group2.Add data.Offset(0, 1).Value Next data اللى مركز معايا وصاحى هيعرف ايه اللى تم اضافته تم اضافه السطر الاول وهو عباره On Error Resume Next وتعنى عند حدوث اى خطا انتقل الى السطر التالى واحد هيقولى طيب وهو هيحصل خطأ ليه هو مش الكود مكتوب صح هقوله لان انت طلبت عدم تكرار الاسماء فالكود عندما يصادف اسم مكرر هيتوقف ليتم تبليغ حضرتك فعلشان كدا كتبتله هذه العباره انه مش عايزه يبلغنى وينتقل الى السطر التالى ويكمل الحلقه بتاعته دون توقف وتم اضافه هذا الجزء البسيط فى السطر group1.Add data, data.Text الجزء المظلل باللون الاحمر هى الاضافه البسيطه اللى تمنع التكرار طيب كدا حلو قوى لحد دلوقتى تم تعبئة كل مجموعه المجموعه الاولى بالعمود A والمجموعه الثانيه بالعمود B ازاى بقى ندخل بيانات كل مجموعه فى اعمدة الكمبوبوكس اذن هستخدم الخاصيه With واقفالها بــ End with للاشاره الى الكمبوبوكس المراد تعبئته With Me.ComboBox1 End With هنا ياتى دور الحلقه التكراريه التانيه اللى مهمتها تلف على كل محتويات المجموعه ودخلها فى اعمدة الكمبوبوكس الحلقه هى For Next للمرور على كل عناصر المجموعه من رقم 1 اللى هو اول عنصر بالمجموعه الاولى الى اخر عنصر بالمجموعه الاولى On Error Resume Next Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) group1.Add data, data.Text group2.Add data.Offset(0, 1).Value Next data With Me.ComboBox1 For i = 1 To group1.Count .AddItem group1(i) .List(.ListCount - 1, 1) = group2(i) Next i End With AddItem. يشير الى العمود الاولى للكمبوبوكس وقمنا بتعبئة عناصر المجموعه group1 (List(.ListCount - 1, 1. يشير الى العمود الثانى للكمبوبوكس وقمنا بتعبئة عناصر المجموعه group2 يبقى تحديد وقت تنفيذ الكود وزى ما اتفقنا قبل كدا ان وقت تنفيذ الكود انت اللى بتحدده ولكن على سبيل المثال فى حدث فتح الفورم Private Sub UserForm_Initialize() On Error Resume Next Dim data As Range Dim group1 As Collection Dim group2 As Collection Set group1 = New Collection Set group2 = New Collection For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) group1.Add data, data.Text group2.Add data.Offset(0, 1).Value Next data With Me.ComboBox1 For i = 1 To group1.Count .AddItem group1(i) .List(.ListCount - 1, 1) = group2(i) Next i End With End Sub والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد وطريقه اخرى من طرق تعبئة الكمبوبوكس انتظرونا تقبلوا تحياتى
  3. اخى الحبيب واستاذى الفاضل محمد الريفى يشرفنى انى اكون اول المعلقين والمهنئين على هذا العمل الرائع بجد جزاكم الله خيرا تقبل تحياتى
  4. اخى الحبيب ياسر العربى انا سعيد انى هكون اول المهنئين مبروك ومليون مبروك انت تستاهل بس يالا ورينا الهمه يعنى خد وهات فيد واستفيد بيزنز يعنى وكويس انك عرفت انها تدبيسه وجر رجل بس جر رجل الى الخير متخفش تقبل تحياتى
  5. استاذى الحبيب ابويوسف انا عايز اعترفلك باعتراف صغير انا شفت الموضوع ده وهو نازل كان بالشاشه الرئيسيه just now بس بصراحه خفت اكتب مشاركة لانها كانت مش هتعجبك وهتزعل منى وانت ربى يعلم ان زعلك عندى غالى لكن بما ان الاخ الحبيب أبوالبراء قال كل اللى كان بخاطرى فقلت اتكلم بقى واتجرأ فى مثل شعبى عندنا بيقول ("القفه " أم ودنين يشيلوها اتنين) يعنى ناس مسئوله عن جانب وناس مسئوله عن جانب اخر يعنى "وتعاونو " وحضرتك كنت بتعمل ده فى موضوع تدوين الاعمال الحديثه بالمنتدى هو راح فين ؟ لية وقف ؟ اتمنى ياغالى متزعلش منى وتتقبل الكلام بصدر رحب انا مشكلتى مش بعرف اعبر زيك أنت ربنا اعطاك حلاوة اللسان أما انا فمتزعلش من اى لفظ مكتوب غير مقصود تقبل تحياتى
  6. مبروك ومليون مبروك اخى خالد انت لها اهل اسال الله ان يعنيك ويوفقك الى ما فيه الخير لاخوانك بالمنتدى تقبل تحياتى
  7. ايه الحلاوه دى يا محترف ايوه كدا طلع كنــــــــــــــــــــــوزك (اوعى تقراها بدون حرف النون ) جزاكم الله خيرا لمشاركتنا اعمالك القيمة تقبل تحياتى
  8. لوم وعتب للاسف برغم ان الموضوع رائع ومفيد جدا الا انه حتى اللحظه شاهده 51 والتعليقات فقط من 2 اعضاء يا خساره يا اعضاء اوفيسنا فين التفاعل؟ فين المشاركات ؟ فين الشكر؟ فين الاهتمام؟ فين الاستفسار عن شئ غامض مثلا بالفيديو ؟ فين النقد حتى لو فرضنا فى شئ غلط؟ فين فين فين لو واحد مننا طلب سؤال وبس مجرد تأخر الاساتذه علينا بالرد بنزعل سبحان الله ولما استاذ قدير ورائع مثل محمد الريفى يقدم موضوع مهم زى ده ويقدمه فيديو وميهتمش بالردود والتفاعل غير 2 فقط والله خساره والف خساره احنا كدا بنخلى اللى عايز يقدم لنا شئ جديد ومفيد يحبط من عدم تفاعلنا واهتمامنا ياريت نراجع انفسنا
  9. استاذى الفاضل /محمد طاهر شاكر اهتمام حضرتك وتوضيح الامر لى ملحوظه كان فى المنتدى فى النسخه القديمه لما ادخل على المشاركات بتاعتى بيكون الترتيب حسب المشاركه اللى تم عليها تحديث اولا وبتظهر مره وحده وغير مكرره بمعنى لو فى موضوع انا كاتب فى مشاركتين بيظهر الموضوع مرتين فى المحتوى الخاص بى فهو ليه ميكنش زى زمان انا ارى انه افضل وبكدا المحتوى مش هيكون كبير يعنى كم صفحه وكمان لو فى موضوع قديم بالصفحه رقم عشره مثلا واليوم فى عضو كتب مشاركه بالموضوع فبيظهر هو اول واحد فى المحتوى فهل بالامكان عمل فكرة المحتوى كما كانت من قبل تقبل تحياتى واسف لازعاجك
  10. الطريقه الٍسابعه :- تعبئه الكمبوبوكس بدون تكرار باستخدام الحلقه التكراريه For Each و الداله Countif (طريقه احترافيه) لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر ولكن دون تكرارشاهد الصوره هنستخدم نفس الكود السابق ولكن مع اضافه الداله Countif الكود هيكون كالتالى With ComboBox1 For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) i = Data.Row aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) If aa = 1 Then .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value End If Next End With أنا هحاول بقدر الامكان اعيشك فيديو تشوف الكود اثناء التنفيذ بيعمل ايه السطرالاول هو With ComboBox1 يعنى بنقول للكود الشغل بتاعنا هيكون مع الكمبوبوكس 1 ( الكمبوبوكس المطلوب تعبئته ) السطر الثانى هو الحلقة التكرارية For Each وقمنا بتسميتها اسم افتراضى وليكن Data ( وممكن تسميها اى اسم او حرف او مجموعه من الحروف ) طيب Data وين موجوده فى اى نطاق قلتله فى In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row يعنى النطاق من A2 الى اخر خلية بها بيانات فى العمود A اللى هى بالصوره السابقه A7 ( طبعا عرفنا ازاى نكتب سطر البحث عن اخر خليه بها بيانات) كدا عرفنا النطاق وهيكون من A2 :A7 طبقا للصوره موضوع الشرح ( وطبعا عند زياده المدى وليكن كتابة اسم جديد فى الخلية A8 سوف يقوم الكود بمعرفه النطاق من A2:A8 ) الحلقه دلوقتى عرفت النطاق بتاعها وهتبدأ تلف على خلية خلية فى هذا النطاق وكل مره هيكون الحلقه Data لها اسم خليه معينه فى المره الاولى سيكون قيمة Data هى A2 والكود هينتقل الى السطر التالى وهو i = Data.Row عملت متغير اسمه i وقلت أن i تساوى Data.Row يعنى رقم الصف اللى فيه Data دلوقتى Data هى A2 والخلية A2 كم رقم الصف بتاعها هو الصف رقم 2 أذن i = 2 الكود هيروح للسطر اللى بعد كدا وهو aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) هنا عملت متغير وسميتها aa وقلت ان aa تساوى قيمة معادله ما هى المعادله هى Countif وهى تعنى عمل احصاء على شئ ما داخل نطاق محدد عند الاعلان عن معادله فى اى كود لازم نكتب الجمله دى .Application.WorksheetFunction ثم اسم الداله اللى انت عايزها انا دلوقتى محتاج الداله Countif وهى ( CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data نطاق العمل هو المظلل باللون الاحمر وشرط الاحصاء هو اللون الاخضر جزء النطاق هو ( الى , من )Sheet1.Range السؤال هنا من ايه ؟ الى ايه؟ من A2 بس فى الكود مش هكتبها A2 هستخدم Cells و Cells عباره عن (رقم العمود, رقم الصف)Cells ِA2 كم رقم الصف بتاعها رقم 2 وكم رقم العمود بتاعها رقمه 1 اذن A2 تساوى (Cells(2, 1 الى ايه ؟ الى اى خلية ؟ الى هنا هتكون متغيره انا بالمره الاولى عايزه الى A2 والمره التانيه الى A3 والمره الثالثه الى A4 وهكذا طيب ودى بقى اكتبها ازاى ؟ ركز معايا يا عبدالتواب شايفك نمت منى فى Cells مش احنا قلنا ان Cells عباره عن (رقم العمود, رقم الصف)Cells طيب رقم الصف كل مره هو اللى مش معروف لكن رقم العمود هو اللى معروف طيب اعرف ازاى رقم الصف علشان كدا انا عرفت المتغير i فى السطر الثالث بالكود i = Data.Row فنكتب الى كدا (Cells(i, 1 الصف متغير من خلال i والعمود ثابت وهو عمود A ورقمه 1 اذن النطاق فى اول لفه للكود هيكون من A2:A2 وشرط الاحصاء هو Data اللى هى قيمة الخلية A2 ( عبدالله باقشير) فالمعادله aa هيكون كم 1 طبعا ليه لان عبدالله باقشير فى النطاق من A2:A2 مظهرش غير مره وحده فقط بعد كدا الكود هينتقل الى السطر التالى وهو If aa = 1 Then استخدمت If لاختبار قيمة aa هل هى تساوى 1 أو لا اذا كانت 1 نفذ السطر اللى بعده واذا مش تساوى 1 اقفل if وانتقل الى Next طبعا فى اللفه الاولى اللى احنا فيها دلوقتى aa = 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 كدا فى اول لفه للحلقه دخل اسم عبدالله باقشير فى العمود الاول للكمبوبوكس ودخل كود العميل وهو 101 فى العمود الثانى للكمبوبوكس هيقفل If ثم ينتقل الى السطر التالى وهو Next Next تعنى ارجع للحلقه For Each مره اخرى فلما يرجع هيكون Data تساوى قيمة A3 ثم ينتقل الى السطر التالى وهو i = Data.Row دلوقتى Data هى A3 والخلية A3 كم رقم الصف بتاعها هو الصف رقم 3 أذن i = 3 هينتقل الى السطر اللى بعده وهو سطر المعادله aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) (Cells(2, 1 اللى هى A2 و (Cells(i, 1 المتغير i دلوقتى رقمه 3 اذن (Cells(3, 1 وهى تعنى الخلية A3 يعنى نطاق هو من A2:A3 وشرط الاحصاء هو Data وقيمتها الحاليه فى هذه الفه A3 (ياسر خليل ) كم مره ظهر اسم ياسر خليل فى النطاق من A2:A3 ظهر مره وحده اذن المتغير aa = 1 الكود هينتقل الى السطر التالى If aa = 1 Then طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value يعنى هيدخل ياسر خليل فى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 102 فى العمود الثانى للكمبوبوكس هيقفل If ثم ينتقل الى السطر التالى وهو Next Next تعنى ارجع للحلقه For Each مره اخرى فلما يرجع هيكون Data تساوى قيمة A4 ثم ينتقل الى السطر التالى وهو i = Data.Row دلوقتى Data هى A4 والخلية A4 كم رقم الصف بتاعها هو الصف رقم 4 أذن i = 4 هينتقل الى السطر اللى بعده وهو سطر المعادله aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) (Cells(2, 1 اللى هى A2 و (Cells(i, 1 المتغير i دلوقتى رقمه 4 اذن (Cells(4, 1 وهى تعنى الخلية A4 يعنى نطاق هو من A2:A4 وشرط الاحصاء هو Data وقيمتها الحاليه فى هذه الفه A4 (عبدالله باقشير ) كم مره ظهر اسم عبدالله باقشير فى النطاق من A2:A4 ظهر مرتين اذن المتغير aa = 2 الكود هينتقل الى السطر التالى If aa = 1 Then طبعا الشرط لم يتحقق لان aa = 2 فمش هينفذ السطريين التاليين لان انا مش عايز الاسم يكرر فى الكمبوبوكس يظهر فقط مره وحده .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value هيقفل If ثم ينتقل الى السطر التالى وهو Next Next تعنى ارجع للحلقه For Each مره اخرى فلما يرجع هيكون Data تساوى قيمة A5 ثم ينتقل الى السطر التالى وهو i = Data.Row دلوقتى Data هى A5 والخلية A5 كم رقم الصف بتاعها هو الصف رقم 5 أذن i = 5 هينتقل الى السطر اللى بعده وهو سطر المعادله aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) (Cells(2, 1 اللى هى A2 و (Cells(i, 1 المتغير i دلوقتى رقمه 5 اذن (Cells(5, 1 وهى تعنى الخلية A5 يعنى نطاق هو من A2:A5 وشرط الاحصاء هو Data وقيمتها الحاليه فى هذه الفه A5 (محمد حسن المحمد) كم مره ظهر اسم محمد حسن المحمد فى النطاق من A2:A5 ظهر مره وحده اذن المتغير aa = 1 الكود هينتقل الى السطر التالى If aa = 1 Then طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value يعنى هيدخل محمد حسن المحمد فى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 103 فى العمود الثانى للكمبوبوكس هيقفل If ثم ينتقل الى السطر التالى وهو Next Next تعنى ارجع للحلقه For Each مره اخرى فلما يرجع هيكون Data تساوى قيمة A6 ثم ينتقل الى السطر التالى وهو i = Data.Row دلوقتى Data هى A6 والخلية A6 كم رقم الصف بتاعها هو الصف رقم 6 أذن i = 6 هينتقل الى السطر اللى بعده وهو سطر المعادله aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) (Cells(2, 1 اللى هى A2 و (Cells(i, 1 المتغير i دلوقتى رقمه 5 اذن (Cells(6, 1 وهى تعنى الخلية A6 يعنى نطاق هو من A2:A6 وشرط الاحصاء هو Data وقيمتها الحاليه فى هذه الفه A6 (عبدالعزيز البسكرى) كم مره ظهر اسم عبدالعزيز البسكرى فى النطاق من A2:A6 ظهر مره وحده اذن المتغير aa = 1 الكود هينتقل الى السطر التالى If aa = 1 Then طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value يعنى هيدخل عبدالعزيز البسكرى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 104 فى العمود الثانى للكمبوبوكس هيقفل If ثم ينتقل الى السطر التالى وهو Next Next تعنى ارجع للحلقه For Each مره اخرى فلما يرجع هيكون Data تساوى قيمة A7 ثم ينتقل الى السطر التالى وهو i = Data.Row دلوقتى Data هى A7 والخلية A7 كم رقم الصف بتاعها هو الصف رقم 7 أذن i = 7 هينتقل الى السطر اللى بعده وهو سطر المعادله aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) (Cells(2, 1 اللى هى A2 و (Cells(i, 1 المتغير i دلوقتى رقمه 7 اذن (Cells(7, 1 وهى تعنى الخلية A7 يعنى نطاق هو من A2:A7 وشرط الاحصاء هو Data وقيمتها الحاليه فى هذه الفه A7 (ياسر خليل) كم مره ظهر اسم ياسر خليل فى النطاق من A2:A7 ظهر مرتين اذن المتغير aa = 2 الكود هينتقل الى السطر التالى If aa = 1 Then طبعا الشرط لم يتحقق لان aa = 2 فمش هينفذ السطريين التاليين لان انا مش عايز الاسم يكرر فى الكمبوبوكس يظهر فقط مره وحده .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value هيقفل If ثم ينتقل الى السطر التالى وهو Next Next طبعا مش هيرجع فى هذه المره الى الحلقه لان النطاق انتهى وهينتقل الى End With كدا الكود انتهى وانا بصراحه انتهيت معاه من كتر اللف طبعا الكود بينفذ الكلام ده فى لمح البصر دون ان تشعر ولكن لو مساحه النطاق كبير مثلا من A2:A1000 سوف تبدأ تشعر ببطئ الكود ممكن مثلا ياخد 30ثانيه اخر شئ طبعا الكود ده وقت تنفيذه انت اللى بتحدده ولكن على سبيل المثال انا عايز اكتبه فى حدث تشغيل الفورم فيكون كالتالى Private Sub UserForm_Initialize() With ComboBox1 For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row) i = Data.Row aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data) If aa = 1 Then .AddItem Data .List(.ListCount - 1, 1) = Data.Offset(0, 1).Value End If Next End With End Sub وعند تشغيل الفورم ستجد الصوره التاليه لاحظ فى الصوره ان الكمبوبوكس يعرض فقط الاسماء دون تكرار ********************************************************************************************* والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد وطريقه اخرى من طرق تعبئة الكمبوبوكس الطريقه القادمه هنعرف ازاى نجلب البيانات بالكمبوبوكس دون تكرار بطريقه اخرى انتظرونا تقبلوا تحياتى
  11. اقتراح للاستاذ الفاضل محمد طاهر مدير المنتدى السلام عليكم فى بعض المنتديات مثل منتدى المحاسبين المصريين يوجد قبل تحميل اى ملف لابد من كتابة رد على الموضوع قبل التحميل مثل الصوره التاليه الفائده من ذالك هو تشجيع العضو على التفاعل مع الموضوعات خاصه الموضوعات اللى بها ملفات تحميل سوف يستفيد منها فوجب عليه ان يشارك ويتفاعل ويترك ملاحظه او شكر او نقد او استفسار هل بالامكان تطبيق ذالك بالمنتدى تقبل تحياتى
  12. استاذى الحبيب محمد الريفى جزاكم الله خيرا اعملك اكثر من رائعه وتاتى دائما بما هو جديد تقبل تحياتى
  13. اخى الحبيب والغالى ابوالبراء مرورك هو الاروع ومشاركتك هى المميزه يا فاكهه المنتدى وبخصوص الشرح ده اللى اتعلمناه منكم يا ابوالبراء بس اهم شئ متغبش عننا تانى وخلينا فى بالك يا كبير تقبل تحياتى
  14. اخى وحبيبى واستاذى محمد الريفى سلمت من كل مكروه وفيك بارك شاكر مرورك العطر تقبل تحياتى
  15. الاخ مارد راجع الرابط التالى تم تفيذ طلبك http://www.officena.net/ib/topic/64350-تحويل-التاريخ-من-ميلادى-الى-هجرى-على-الفورم/#comment-418586 تقبل تحياتى
  16. يا غالى مجرد تكتب السنه وتضغط انتر هيكتب التاريخ بالهجرى فى التكست الاخضر جرب وعلمنى
  17. اخى الحبيب زيزو الغالى مشكور على مرورك العطر بص يا عم زيزو الملف الاول انت بدخل اليوم ثم الشهر ثم السنه بمجرد انتهاء من كتابه السنه يتم اظهار التاريخ بالهجرى فى التكست الاخضر ( ودا كان طلب الاخ مارد) اما الملف الثانى بتكتب التاريخ الميلادى فى التكست وبمجرد الانتهاء والخروج بانتر يتم تحويل التاريخ الى هجرى بنفس التكست يعنى اللى بتطلبه موجود اصلا جرب مره تانية تقبل تحياتى
  18. الاخوة الكرام فى هذا الصرح العظيم بناء على طلب للاخ " المارد العراقى " على هذا الرابط http://www.officena.net/ib/topic/64162-موضوع-خاص-بالردود-والاستفسارات-واسئله-اختبارات-على-شروحات-الفورم-سلسلة-علمنى-كيف-اصطاد/?do=findComment&comment=418485 قمت بعمل طلبه وحبيت يكون فى موضوع مستقل حتى تعم الفائده ويكون سهل فى الوصول اليه من خلال البحث فيما بعد الطلب كان السلام عليكم أستاذ عندي 3 (textbox) الاول يحتوي على تاريخ اليوم والثاني يحتوي تاريخ الشهر والثالث تاريخ السنه بالميلادي و عندي تكست رابع اريد ان اجعل التاريخ في التكست الرابع يمثل تاريخ التكست الثلاثه السابقه ولكن بالهجري بأستخدام اليوزر فورم دون الرجوع او استخدام الخلايا في الاكسل على سبيل المثال التكست الاول يساوي 22 الي هو اليوم ولثاني يساوي 2 الي هو الشهر والثالث يساوي 2000 كيف اجعل التكست الرابع يساوي ( 18 / 11 /1420) الي هوه التاريخ الهجري لتلك السنه بواسطة vba فقط دون استخدام خلايا الاكسل ؟؟ مرفق ملف به ما تريد الملف الاول تحويل التاريخ من يوم وشهر وسنة تحويل التاريخ من ميلادى الى هجرى على الفورم.zip الملف الثانى تحويل التاريخ بنفس التكست تحويل التاريخ من ميلادى الى هجرى على الفورم - Copy.zip تقبلوا تحياتى
×
×
  • اضف...

Important Information