نجوم المشاركات
Popular Content
Showing content with the highest reputation on 01/17/15 in مشاركات
-
إخوتي نحن هنا كلنا أخوة لا فرق بيننا .. كلنا عائلة واحدة ، وكل متميز في جانب ، وكلنا نكمل بعضنا البعض بارك الله في أخوتنا وفي أسرتنا الأوفيسنية تقبلوا تحياتي3 points
-
السلام عليكم ورحمة الله تعالى وبركاته بعد الإصدار الذي طرحته قبل أيا والذي تحت عنوان هدية لمحبي الألوان والتصميم فورم لمعرفة رموز الالوان أقدم لكم الإصدار جديد من فورم RGB Color Codes Chart واجهة الفورم نأتي الأن لشرح الفورم 1) نقوم بإنشاء 3 ============ ScrollBar نسميها كالتالي: RGB_Red RGB_Green RGB_Blue خصائصها موضحة في الصورة التالية أنا إخترت RGB_Red وهكذا مع بقية ScrollBar 2) نقوم بإنشاء 3 =========== TextBox نسميها على النحو التالي TRed TGreen TBlue خصائصها موضحة في الصورة التالية أنا إخترت TRed وهكذا مع بقية TextBox 3) نقوم بإنشاء ========== Label نسميه بإسم RGB_Color خصائصه موضحة في الصورة التالية 4) نقوم بإنشاء ========== CommandButton نسميها بإسم Cmd_Copy خصائصه موضحة في الصورة التالية نأتي إلى المرحلة المهمة وهي إدراج الاكواد 1) في حدث ScrollBar مثال: أنا أخترت ScrollBar الأحمر وهكذا مع باقي ScrollBar Private Sub RGB_Red_Change() RGB_Color.BackColor = RGB(TRed, TGreen, TBlue) 'والقيم تأخذ من مربعات النص الثلاث RGBالليبل المسمى(RGB_Color) عند تعبئة بالون يساوي Me.TRed = RGB_Red ' هنا قيمة مربع النص تساوي قيمةScrollBar End Sub 2) في حدث TextBox مثال: أنا أخترت TextBox الأحمر وهكذا مع باقي TextBox Private Sub TRed_Change() RGB_Red = Me.TRed ' هنا قيمة( ScrollBar) تساوي قيمة مربع النص End Sub 3) في حدث CommandButton زر النسخ Cmd_Copy نستعمل الكود التالي Private Sub Cmd_Copy_Click() Dim myClipbd As New DataObject With myClipbd .SetText "RGB" & " " & "(" & Me.TRed & "," & " " & Me.TGreen & "," & " " & Me.TBlue & ")" .PutInClipboard End With MsgBox "تم النسخ بنجاح" End Sub عند لصق الكود يكون على الشكل التالي RGB (150, 103, 53) أتمنى الشرح والفكرة نالت إعجابكم تم بحمد الله وتوفيقه أترككم مع الملف المرفق RGB Color New.rar2 points
-
فيديو لاغنية لرسول الله فى ورقة اكسل ملحوظة الملف اكسل 2007 من خيارات اختار تمكين المحتوى ليعمل الفيديو اذا لم يعمل الفيديو قم بتنفيذ التالى غدا ان شاء الله ملف اكسل لعمل الفيديو من خلال فورم لرسول الله محمد نبى الله2 points
-
جزاك الله خيرا مبدع دائما فشكرا لك2 points
-
2 points
-
ما شاء الله تبارك الله ولا قوة الا بالله جزاك الله خيرا استاذ الجموعي على العمل الاكثر من رائع... colors give life flavor2 points
-
السلام عليكم ألق نظرة على الملف المرفق لعل فيه ما تريد (إن كنت قد فهمت مطلوبك)... بن علية الملف المرفق : اسماء 2014.rar2 points
-
السلام عليكم ورحمة الله وبركاته اخواني الاعزاء هنا ملف كامل لكيفية استخدام الUserForm وكيفية التعامل معه وبجميع أدواته المستخدمة مع شرح الخصائص المتعلقة به وبادواته كذلك تم شرح الاكواد الخاصة به وبادواته وتم استخدام الصور والامثلة العملية في الشرح وبصورة ميسرة وبسيطة حتى يتم استيعابها بالصورة المطلوبة وتم تقسيم العمل الى ستة ملفات وبصورة تسلسلية اخوكم عماد الحسامي الدرس الأول UserForm.rar الدرس الثاني.rar الدرس الثالث textbox.rar الدرس الرابع.rar الدرس الخامس.rar الدرس السادس.rar الدروس السته مجمعه.zip1 point
-
بسم الله الرحمن الرحيم أساتذتى بالمنتدى و ألاخوة الزملاء كل عام وانتم بخير بمناسبة العام الجديد مما لا شك فيه أن الأهداء يقدم الى أغلى شخص لدى الانسان وبما انه اغلى شخص فلابد من تقديم أغلى هدية يملكها فسمحو لى ان اقدم أغلى ما املك واعز ما أملك وهو برنامج EMA الى أغلى منتدى . منتدى أوفيسنا هذا الصرح العظيم الذى شرفت بالانضمام اليه أهداء برنامج EMA برنامج EMA تم تصميمة بعمل متواصل على مدار 300 يوم بمعدل لا يقل عن 5 ساعات يوميا معظمها كان البحث والتفكير وكيفية التنفيذ فأن أحسنت فمن الله وما توفيقى الا بالله وأن أخطأت فمن نفسى والشيطان والحمد لله الذى بنعمته علينا تتم الصالحات تم رفع البرنامج بتاريخ 29-9-2014م وهذا كان الاصدار الاول من الجزء الاول للبرنامج وبعد التواصل مع الاعضاء ومشاركتى لأرائهم طلب منى بعض الاضافات الاخرى والحمد لله تم ذالك أقدم لكم الاصدار الثانى من الجزء الاول أتمنى أن يحوز اعجابكم ورضاكم البرنامج به أمكانيات وخيارات كبيرة جدا تم تصميمه على اعلى مستوى من الرقابه والتحكم فى المدخلات أنا الحمد لله عملت على برامج كبرى وهذا البرنامج عصارة خبرة محاسبية وأنتظرو منى قريباً الجزء الثانى للبرنامج (المخازن والمبيعات والمشتريات) فى نفس الملف وأخيرا وليس أخراً البرنامج بين أيديكم لا يتم فتج البرنامج الا فى الساعه 12ص أى بالليل 2015/1/1م لأنه نسخة عام 2015م ملحوظه مهمه جدا 1-يفضل تشغيل البرنامج على 2007 2-لا يتم تغيير اسم البرنامج نهائيا لانه لا يفتح عند تغيير- الاسم (EMA)فقط فى بعض الاحيان عند التنزيل يكون EMA 1 فى هذه الحالة يحذف 1 أن شاء الله نرفق لكم شرح لكيفية العمل على البرنامج اسم المستخدم / الدعم الفنى الباسورد / 123 EMA.zip1 point
-
الاخ مختار شكرا لك اذا لم نغار على ديننا ونبينا نغار على من انتظر غدا ان شاء الله تسجيل فيديو لهذا الملف بعد تعديله مع ملف اخر لرسول الله لعدد2 اغنيه للرسول داخل user form وهذه هى الصور1 point
-
1 point
-
بالفعل أخى الحبيب تمت التجربة وعملت بكفاءة ومفيش مجاملات فى مكتبة عظيمة تضم كم كبير جدا جدا من الأكواد الهامة شكرا لمجهودك العظيم وذادك الله من العلم الكثير والكثير وجزاك الله كل خير على إهتمامك1 point
-
الحمد لله الذي بنعمته تتم الصالحات وفق الله الجميع لما فيه الخير والصلاح لجميع المسلمين تقبل تحياتي :fff:1 point
-
1 point
-
فى نموذج اسمه FrmControl1 ويحتوى على نموذج فرعى بإسم frmqry33 النموذج الفرعى غير موجود واعتقد انا هذا النموذج ما تحدث عنه الاستاذ على فى مشاركته1 point
-
طيب ممكن استأذن حضرتك تبعتى الملفين الأصلى والتانى اللى حضرتك عملته وأعطاك خطأ فى الدخول لان من تجربتى فى نقص لسه بأكمله لكن بفضل لم اجد اى أخطاء النقص هو مجرد تكمله وتيسير على المدير او صاحب البرنامج فقط فى انتظار الملفات انشاء الله1 point
-
بالكلمات لا يمكنني أن أعبر عن مدى سعادتي واحترامي للزملاء الكرام وعلى هذه التهنئة جزاكم الله عني خيرا ويعجز لساني عن تقديم الشكر بالقدر اللائق بحضراتكم فشكرا لك استاذنا الفاضل : أبوخليل شكرا ً لك استاذنا الفاضل: اسير الشروق وشكراً لك استاذنا الفاضل : أبو الآء لكم جزيل الشكر وهذه الترقية لن اتمكن من الحصول عليها لولا مساعدة الزملاء الكرام اعضاء المنتدى وتقديم العون لي في كل سؤال اطرحه فشكرا للجميع1 point
-
اخى الجموعى 1- بخصوص ايقونه الفورم هى من خيارات اكسيل يعنى فورم جاهز للاستخدام ازاى تظهره اضغط على ايقونه اكسيل اختار Excel Options ثم اختار Customize لو الاوفيس بتاعك انجلش هتلاقى كمبوبوكس على اليسار اختار منه All Commands أنزل بالاسكرول بار لتحت الين توصل حرف F هتلاقى Form قم بالوقوف على كلمة Form ثم ADD ( هتلاقية بالمنتصف ) هتلاقى الفورم انتقل الى المربع ناحية اليمين ثم اضغط اوك هتلاقى الايقونه موجوده 2- الفورم اكثر شئ يتسع الى 32 عمود لازم تحدد الجدول اللى انتى عايز تشتغل عليه وتضغط على الايقونه بس طبعا لازم بداية الجدول تكون هى رؤوس الاعمده تقبل تحياتى1 point
-
اتفضل انا عدلت على اد ما قدرت على اد فهمى لان الملف محتاج تنسيق كتير جدا جدا جدا اسف انا فتحت الكود البرمجى ولغيت كلمة السر علشان اقدر اشتغل ابقى حط كلمة سر لها تانى اتفضل حما من المرفقات طلبات الاحتياج.rar1 point
-
حمدا لله على سلامتك أيها الصقر الجريح شفاكم الله وعافاكم (طمني عليك) الأخت الفاضلة يوجد بالموضوعات المثبتة دورة بسيطة كبداية لفهم الخطوط العريضة للتعامل مع VBA بعنوان افتح الباب http://www.officena.net/ib/index.php?showtopic=56941 وبعدها يمكن الإنطلاق إلى عالم البرمجة1 point
-
السلام عليكم ده رابط يمكنك الاستفاده منه http://www.excel-easy.com/vba/range-object.html رابط اخر http://www.excel-pratique.com/en/vba/controls_continued.php رابط اخر http://excelvbatutor.com/vba_chp15.htm حاولت ارفاق كتب لكن للاسف الحجم كبير حتى وهى مضغوطه برفعها ان شاء الله على موقع رفع ثم اعطيك الرابط تقبل تحياتى1 point
-
أستاذي الكريم والله شرف لي إضافة هذا العمل المتواضع لمكتبتك سعدت بردك الرائع جدا بارك الله فيك بالنسبة لمرتبه أستاذ بلاها فأنا مزلت طالب في مقامكم ودي تقديري1 point
-
1 point
-
1 point
-
اخى وحبيبى الاستاذ احمد عمل مميز ورائع بارك الله فيك وزادك من علمه ( سامحنى على التاخير بالرد لكن والله انا لسه شايف الموضوع دلوقتى وبصراحه روعه دا كنز جديد بضيفه للمكتبة عندى) تقبل تحياتى والى المزيد من التقدم1 point
-
اخى الكريم عمل مميز من استاذ رائع بضيفها للمكتبة عندى لانى بعتز بالكنوز تقبل تحياتى1 point
-
اخى الحبيب بعد اذن حضرتك الموضوع هو شرح كيفية عمل ترحيل لو عندك شئ غير عنوان الموضوع اعمل موضوع جديد واطلب طلبك وانا تحت امرك او اى من الاساتذه فى المنتدى هيساعدك حتى لا يتم التشتيت على الاخوة اللى عايز يتعلم ويستفيد تقبل تحياتى جرب المرفق هل هو طلبك سيارات 2015.zip1 point
-
تم التعديل كما تريد ملف ابو سليمان للفرز salim 2.rar1 point
-
سننقل هذا الموضوع الى قسم اعلانات الاعضاء ومن لديه الاستعداد والقدرة التواصل مع السائل على الخاص علما ان المنتدى لا يتحمل اي مسؤلية1 point
-
السلام عليكم ورحمة الله أخي الكريم سلامي، لست أدري ما المشكلة في شيت "الصور" Pict لم تفلح معي أن يكون اتجاه الشيت من اليمين إلى اليسار (حيث أنه يضع الصور التي يجدها في العمود EZ عوضا من العمود B) لذا وبعد تبديل اتجاه الشيت من اليسار إلى اليمين كانت النتائج وفق المطلوب... في شيت البطاقة Carte تم التعديل على بعض المعادلات (تصحيح الخطأ في حالة عدم وجود البيانات) وإضافة تسميتين خاصتين بجلب صورة كل بطاقة، الأولى ربطتها بالخلية O4 والثانية ربطتها بالخلية O6... أرجو أن تفي هذه التعديلات بالمطلوب... يبقى ترقيم الصور في المجلد Photo وفق أرقام ترتيب البيانات... أخوك بن علية الملف المرفق : بطاقات للارسال.rar1 point
-
السلام عليكم ورحمة الله أخي الكريم إيهاب، تم تعديل الرابط في الرد السابق... وآسف لهذا الخلل والملف المرسل خطأ... أخوك بن علية1 point
-
1 point
-
اخى الفاضل الجموعي عمل أكثر من رائع .. سلمت يمينك وجعله الله في ميزان حسناتك هدية مقبولة منك أخى الكريم وأدعوا الله ان ينفع بك الإسلام والمسلمين بالفعل اى متعامل مع الفورم والاكواد لا يستطيع الاستغناء عن الألوان ونسب ال RGB تحياتي1 point
-
السلام عليكم ورحمة الله أخي الكريم إيهاب، تم تعديل المعادلة... أخوك بن علية المرفق : Book1_4.rar1 point
-
1 point
-
جميل استاذ عبدالله .. شكرا لك على المعلومات جرب الكود التالي و خبرنا الدالة كما قلت مازالت في طور التطوير و نحتاج ان نحسن من كفائها. تعديل الكود بدل خلية عمود V1.zip1 point
-
الحلقة الثانية عشر *************** السلام عليكم ورحمة الله وبركاته ... إخواني الكرام ..ها أنا قد عدت إليكم بعد طول عياب (والعود أحمد .. مش ياسر ولا حسام) نبدأ حلقة جديدة معكم من حلقات افتح الباب ، وهات لي معاك كيلو كباب (عشان لسه العشا مجهزش) نكمل في هذه الحلقة بإذن الله مشوار الدوال الخاصة بالتعامل مع النصوص - * - كنا اتكلمنا عن الدالة LCase الخاصة بتحويل أحرف اللغة الإنجليزية إلى حروف صغيرة ، والدالة UCase الخاصة بتحويل أحرف اللغة الإنجليزية إلى حروف كبيرة .. كلنا يعرف إن كتابة الأحرف باللغة الإنجليزية ليها تعامل خاص ..بمعنى آخر لو بنكتب اسم شخص ، مش مقبول إن يكون كل الحروف كبيرة ولا كل الحروف صغيرة ، إنما بيكون الحرف الأول في كل اسم حرف كبير والحروف المتبقية حروف صغيرة زي كدا Yasser Khalil طيب هل فيه دالة تكفي لهذا الغرض ؟ نعم .. روح لورقة العمل الأول واكتب اسمي (اسمي الأول جرب عليه وبعدين جرب على اسمك .. شايف حسام مش معبرني وبيكتب اسمه هو الأول !!) اكتب في الخلية A1 مثلاً yasser khalil كل الحروف Small أي حروف صغيرة ، وفي الخلية المجاورة B1 اكتب المعادلة التالية : =PROPER(A1) الناتج إن الحرف الأول في اسم Yasser والحرف الأول في اسم Khalil أصبحا كلاهما Capital - والحمد لله - نرجع لمحرر الأكواد .. ما هي الدالة البديلة لهذه الدالة في ورقة العمل ؟ هصدمك وأقولك مفيش .. وبعدين أفوقك من الصدمة وأقولك متقلقش فيه طريقة ..وطريقة ممتازة لاستخدام معظم الدوال وليس كلها في محرر الأكواد .. Sub ProperFunction() Dim strName As String strName = Range("A1").Value Range("B1").Value = Application.WorksheetFunction.Proper(strName) End Sub قمنا بالإعلان عن متغير نصي ، وقيمته هي قيمة الخلية A1 ، وفي السطر التالت .. عايزين قيمة الخلية B1 تساوي قيمة النص الموجود في A1 بس بشكل مختلف ، باستخدام الدالة Proper ، فنضع علامة يساوي (ومننساش اللي على الطرف الأيسر مجهول دائماً .. واللي على يمين علامة يساوي هو القيمة المراد وضعها للمجهول) استخدمنا هنا كلمة Application للإشارة إلى تطبيق الإكسيل .. ممكن الناس اللي مش أد كدا في الإنجليزي أقولها على خدعة بسيطة .. الخدعة إنك متحفظش الكلمة لو صعبة عليك ، اكتب بس أول كام حرف منها وليكن Appl واضغط Ctrl + مسطرة هتلاقي المحرر المحترم كمل لك الكلمة ، أو هتظهر لك قايمة تختار منها الكلمة اللي إنت عايزها .. بعد كلمة Application تم استخدام الخاصية WorksheetFunction وهذه الخاصية كأننا بنقول للمحرر إننا هنستعين بدوال الإكسيل المدمجة ، نستعين بها هنا في محرر الأكواد ، وبعديها نقطة وبعد النقطة وقفة (يعني قوم اقف واقعد تاني ..عشان تستعيد نشاطك) ، بعد النقطة هنكتب الدالة المراد الاستعانة بها ، وهي هنا الدالة Proper اللي فهمناها من شوية.. والدالة ليها بارامتر واحد بيتم استخدامه عن طريق فتح قوس (Shift + 9) ، وبين الأقواس بنكتب النص ، ومننساش إن الدالة بتتعامل مع النصوص !! ومننساش بردو قفلة القوس () ونكتفي بهذ القدر (فيه ناس رفعت ايديها وهللت خلصت الحلقة خلصت الحلقة ..متفرحوش أوي كدا ، إحنا لسه يدوب في بداية الحلقة .. انتهينا بس من الدالة Proper وكيفية استخدامها في محرر الأكواد) .. ****************************************************************************** ننتقل لدالة أخرى لذيذة جداً ومفيدة جداً ، ألا وهو الدالة Trim ودي دالة بسيطة جداً ، وظيفتها إزالة الفراغات الزائدة (بس خلاص .. انتهى الشرح) نروح لورقة العمل أولاً ونطبق الدالة ، اكتب في الخلية A3 مثلاً اسمي ، اضرب بالمسطرة 3 مرات لا خليهم 4 مرات ، واكتب Yasser وبعدين بالمسطرة اضرب 4 مرات وبعدين اكتب Khalil واضرب المسطرة 4 مرات (كفاية ضرب المسطرة اشتكت) .. في الخلية المجاورة B3 اكتب المعادلة بالشكل التالي : =TRIM(A3) هنلاقي الدالة قامت بالواجب وحذفت كل المسافات الزائدة ..وتركت مسافة واحدة بين الكلمتين فقط.. ننتقل لمحرر الأكواد .. نفس الاستخدام تقريباً ونفس الشكل : Sub TrimFunction() Dim strName As String strName = Range("A3").Value Range("B3").Value = Trim(strName) End Sub ننفذ الكود ، نلاقي الناتج في الخلية B3 يصدم (لم تؤدي الدالة عملها كما أدته في ورقة العمل) ، الدالة حذفت المسافات الزائدة في بداية النص وفي نهايته ، أما المسافات الزائدة بين الكلمتين فلم يتم حذفهم (مش عارف دا عيب في محرر الأكواد ، ولا بيل جيتس متعمدها ..عموماً هبقا أسأله في النقطة دي لما يطلبني في الاجتماع القادم يوم 30 فبراير القادم ) نفهم من كدا إن الدالة Trim في محرر الأكواد مختلفة عن الدالة Trim في ورقة العمل ..طيب ما الحل ؟ أشيروا علي إخواني الكرام ، الحل أبسط مما تتخيلوا (اللي فهم الدالة السابقة هيفهم إزاي هنحلها هنا ..) Sub TrimFunction() Dim strName As String strName = Range("A3").Value Range("B3").Value = Application.WorksheetFunction.Trim(strName) End Sub تم حل المشكلة بحمد الله وعونه وتوفيقه .. ****************************************************************************** ننتقل لدالة جديدة ، ألا وهي الدالة Space (المسطرة) ..وظيفة الدالة دي ، إننا نريح المسطرة من كتر الضرب عليها ، حيث أن شكوتها قد وصلت للأمم المتحدة ، فقررت الأمم المتحدة النظر في شكوى المسطرة الضعيفة التي اشتكت من كثرة الضاربين عليها ، وتوصلت الأمم المتحدة لاتفاق مع بيل جيتس بإدراج دالة تحل محل المسطرة في محرر الأكواد (وأغلقت القضية) .. في الخلية A1 اكتب Yasser Khalil وروح للمحرر واكتب الكود التالي : Sub SpaceFunction() Dim strName As String strName = Range("A1").Value Range("B1").Value = Space(4) & strName & Space(4) Range("C1").Value = Len(Range("A1")) & ":" & Len(Range("B1")) End Sub لاحظ إننا استخدمنا الدالة وبين قوسين كتبنا 4 ، والرقم دا عدد المسافات ، واستخدمنا الدالة مرتين ، مرة قبل النص ومرة بعد النص ، وفي كل مرة 4 مرات بالمسطرة ، يعني مجموع المسافات = 8 ، يعني إحنا ريحنا المسطرة من إننا نضربها 8 مرات ، وفي الخلية C1 استخدمنا الدالة Len (واللي ميعرفهاش يترك الحلقة دي ويرجع للحلقة اللي فاتت ..مش ناقصة وجع قلب ، وكتر كلام ع الفاضي) ، عشان نحسب طول النص في الخلية A1 وطول النص في الخلية B1 ، هنلاقي الفرق بينهم 8 (انتهى الحديث عن قضية المسطرة التي تشتكي). *************************************************************************** ننتقل إلى دالة ذات أهمية كبيرة ..الدالة Replace والكل يعرفها جيداً ، وربما الكل يستخدمها كثيراً ، وهي دالة الاستبدال (أي استبدال نص مش عاجبك بنص يعجبك ويدخل دماغك) تقوم الدالة باستبدال النص القديم بآخر جديد ... ناخد مثال يا أستاذ جمال : نفترض إني ادلعت شوية وأنا بكتب اسمي وكتبته في الخلية A1 بهذا الشكل Y a s s e r (من حق التلميذ يدلع ..مش الكبير لأ !!) .. المهم أنا من النوع الكسول ، أنا تركت مسافة بين كل حرف وحرف ، يا ترى هتعب نفسي وأشيل كل مسافة بين كل حرف وحرف (طبعاً مش هيحصل !! ولو حصل يبقا أنا مفيش ورايا شغل وقاعد بلعب) المهم دلوقتي نخلي بالنا ونسأل ايه هو اللي مش عاجبنا (الإجابة المسافة بين كل حرف وحرف) ، طيب ونسأل سؤال تاني (ما هو لازم تمشي بمنطق السؤال والإجابة) نسأل ايه المطلوب ؟ (الإجابة إننا نحذف المسافة أو ممكن نقول الطلب بشكل تاني عشان نقدر نوصل للحل :: المطلوب إننا نستبدل المسافة " " بـ "" (ايه ده ؟ هي دي الإجابة ؟؟ أقولك أيون أيون هي دي الإجابة) .. نشوف المثال يا أستاذ عبد العال .. الأول قبل المثال نشوف البديل ليها في ورقة العمل ، ضع المعادلة التالية في الخلية B1 : =SUBSTITUTE(A1," ","") الدالة تقوم باستبدال النص القديم بالنص الجديد (زي الفل ..نفس الكلام مع الدالة Replace في محرر الأكواد) Sub ReplaceFunction() Dim strName As String strName = Range("A1").Value Range("B1").Value = Replace(strName, " ", "") End Sub البارامتر الأول للدالة عبارة عن النص المراد البحث فيه المراد البحث داخله .. والبارامتر الثاني النص المراد استبداله أي النص القديم .. والبارامتر الثالث النص الجديد (اللي عاجبنا وبيحب أكل الجبنه) .. كدا انتهى الحديث عن الدالة Replace ..! *************************************************************************** الآن مع دالتين جديدتان (أعتذر قديمتان) الدالة Right والدالة Left .. كلنا نعرف استخدام هاتين الدالتين في ورقة العمل .. ناخد مثال في ورقة العمل أولاً لنفهم عمل الدالتين .. في الخلية A1 نكتب الإيميل yakh777@yahoo.com وفي الخلية B1 نكتب المعادلة بالشكل التالي : =RIGHT(A1,9) الناتج هو yahoo.com وهو العدد الذي حددناه في المعادلة .. وتم استخراج النص من ناحية اليمين (اللهم اجعلنا من أهل اليمين .. أنا والأعضاء في المنتدى أجمعين) في الخلية C1 اكتب المعادلة التالية : =LEFT(A1,7) فيكون الناتج النص من ناحية اليسار ، وهو yakh777 ,وحددنا عدد الأحرف 7 أحرف .. لو قمنا بتغيير الإيميل بأي إيميل آخر .. أكيد النتائج ستختلف .. إذاً لابد من حل لتكون المعادلة أكثر مرونة (الحل هو الاعتماد - يا أستاذ عماد - هنا على علامة @ ) .. دعونا نفكر بصوت عالي ..نفكر الأول ونشوف هنعمل ايه ؟؟؟ نبدأ بالدالة Right .. الأول في خلية نكتب المعادلة: =LEN(A1) هنلاقي عدد حروف النص 17 ... تمام !! قول تمام يا أستاذ هشام - ونكتب المعادلة التالية في خلية أخرى (أي خلية) =FIND("@",A1) ودي بنحدد من خلالها موقع علامة @ داخل النص .. هنلاقي الناتج 8 (أي أن موقع هذه العلامة رقم 8 . لو عدينا من الشمال هنلاقي رقمها 8) طيب نجرب نطرح طول النص بالكامل - موقع علامة @ هنلاقي الناتج 9 (تسعى في الخير يا كبير) هو دا المطلوب ... واحد رفع ايده وقالي : مش فاااااهم (هقوله مش هكرر تاني .. إنت خدها قاعدة لو مش هتقدر تفهمها .. لو حبيت تستخرج النص من جهة اليمين ، يبقى تحفظ الشكل ده : طول النص بالكامل - موقع العلامة @) يبقا ممكن نكتب المعادلة التالية في الخلية B1 : =RIGHT(A1,LEN(A1)-FIND("@",A1)) جرب تكتب أحرف زيادة على يمين العلامة أو على يسارها ، وشوف النتائج بنفسك !! (هنلاقي النتائج دايماً صحيحة سواء كتبت أحرف زيادة في اليمين أو في اليسار) .. طيب الدالة Left دي أسهل .. لأننا هنعتمد على موقع علامة @ وبس .. لو موقع علامة @ رقم 8 زي مثالنا ، يبقى المعادلة هتكون بهذا الشكل : =LEFT(A1,FIND("@",A1)) هنلاحظ الناتج فيه علامة @ للتخلص منها (هات أستيكة وامسحها) أو قم بطرح موقع العلامة @ - 1 ليصبح الناتج صحيح .. =LEFT(A1,FIND("@",A1)-1) نسينا شغل الأكواد ، واندمجنا في دوال الإكسيل . أعتذر ، لكن لابد من فهم المعادلة بشكل جيد ، حتى نتمكن من فهم العمل بالأكواد ... نروح للمحرر ::: Sub RightLeftFunction() Dim strEmail As String strEmail = Range("A1").Value Range("B1").Value = Right(strEmail, Len(strEmail) - InStr(strEmail, "@")) Range("C1").Value = Left(strEmail, InStr(strEmail, "@") - 1) End Sub أعتقد الموضوع أصبح واضح وضوح الشمس في نهار ملبد بالغيوم .. نفس الدالة اللي استخدمتها في ورقة العمل أخدتها نسخ ولصقتها في محرر الأكواد .. وبدلت شوية حاجات بسيطة : شلت المرجع A1 ووضعت مكانه المتغير strEmail ، وشلت Find ووضعت مكانها الدالة InStr (بس اللي مركز هياخد باله إن الدالة InStr بتبحث عن كومة القش وتشوف الإبرة -- لكن الدالة Find بتبحث عن الإبرة في كومة القش .. بمعنى آخر النص الفرعي المراد البحث عنه يختلف مكانه بالنسبة للدالة Find في ورقة العمل ، والدالة InStr في محرر الأكواد # انتهى الحديث عن الدالتين Right و Left ) ************************************************************************* ننتقل لآخر دالة (عشان أنا تعبت لكم صراحة ..) الدالة Mid ، وبردو فيه ناس تعرف الدالة كويس جداً من خلال ورقة العمل ... في الخلية A1 اكتب الإيميل yakh777@yahoo.com في محرر الأكواد اكتب الكود التالي : Sub MidFunction() Dim strEmail As String strEmail = Range("A1").Value Range("B1").Value = Mid(strEmail, 1, InStr(strEmail, "@") - 1) End Sub أنا بدأت بالمثال قبل الشرح .. الدالة ليها 3 بارمترات الأول هو النص المراد البحث داخله (كومة القش) ، والبارامتر الثاني هو بداية عملية التنقيب أو البحث وبيكون قيمة رقمية أكيد ، والبارامتر الثالث هو عدد الحروف المراد استخراجها .. في المثال النص هو المتغير strEmail وبداية عملية البحث 1 ، ولاستخراج عدد الحروف ولأنها غير معلومة أو أننا نريد استخراج الجزء الأول من النص قبل علامة @ قمنا باستخدام الدالة InStr لتحديد موقع علامة @ وطرحها من 1 لنحصل على عدد الأحرف على يسار العلامة (أظن مفهومة يا أخ سلومة).. واستخدامها في ورقة العمل مشابه تماماً لمحرر الأكواد .. المعادلة التي يمكن استخدامها في ورقة العمل : =MID(A1,1,FIND("@",A1)-1) الدالة ببساطة تقوم باستخراج النصوص التي ترغب ، ولكن استناداً إلى نصوص أخرى ... بهذا نكون قد انتهينا من دوال التعامل مع النصوص ... أرجو أن تكونوا قد وفقتم في فهم الحلقة على أكمل وجه .. الواجب المطلوب : في الخلية E5 قم بكتابة النص Yasser Khalil ، وفي الخلية المجاورة لها ، قم بعمل الكود اللازم لجعل النص يبدو بهذا الشكل Khalil, Yasser (لتسيهل الحل قم باستخدام دوال التعامل مع النص لاستخراج الاسم الأول ، والاسم الثاني ...مفتاح الحل) وإلى لقاء متجدد مع حلقات افتح الباب .. كان معكم أخوكم أبو البراء من مصمت أوفيسنا دمتم في رعاية الله1 point
-
الحلقة الحادية عشرة ***************** السلام عليكم ورحمة الله وبركاته إخواني الكرام في الصرح العملاق أوفيسنا ، أقدم لكم اليوم موضوع في غاية الأهمية ، ألا وهو التعامل مع السلاسل النصية Strings والدوال الخاصة بالتعامل مع النصوص. اتعرفنا في حلقات سابقة على المتغير String ، ودا بنستخدمه لتخزين النصوص .. أول شيء بنعلن عن اسم المتغير ونحدد نوعه كـ String بالشكل ده : Dim strEmail As String وقلنا إن الأفضل دايماً لما نسمي متغير يكون معبر ، ففي السطر اللي فات أنا نويت والنية لله إني أخزن نص ، والنص ده عبارة عن إيميل ، فسميت المتغير strEmail أول 3 حروف من كلمة String وبعدين كلمة معبرة عن النص Email ، وحددت نوعه إنه نص String. طيب تاني سطر ببدأ أضع قيمة للمتغير اللي أعلنت عنه ، ودا بيكون بطريقة معينة ، إننا نحط اسم المتغير على اليسار ، وبأكد على اليسار وبعديه علامة يساوي ، وبعد علامة يساوي أفتح أقواس تنصيص وأكتب النص اللي عايز أخزنه وأقفل أقواس التنصيص (كل اللي بقوله يا حماده كلام قديم مفيش جديد ..دا في الإنجليزي بيسموه Warm-Up يعني تهيئة للحلقة) strEmail = "yakh777@yahoo.com" طيب هل دايماً لازم نحط نص في قيمة المتغير النصي ولا فيه طريقة تانية ؟ فيه طريقة تانية ..إن يكون النص في خلية معينة وليكن A1 ، ولما نيجي نضع قيمة للمتغير نشير لقيمة الخلية A1 زي كدا : strEmail = Range("A1").Value حط الايميل في الخلية A1 ، وجرب بنفسك .. جرب مرة تكتب النص ، وعن طريق الدالة Msgbox شوف النتيجة ، ومرة تانية جرب السطر الأخير وشوف النتيجة (النتيجة واحدة .. كل السبل تؤدي إلى حلقات افتح الباب) ... خلصنا المراجعة يا مدحت .. نشوف ايه اللي هنقدمه في حلقة النهاردة .. أنا صراحة مش مرتب في أفكاري .. ممكن تقول إني عشوائي جداً ، بس الحمد لله ، بتوفيق الله عزوجل بيخرج الموضوع منظم ومتسألش إزاي ..! أنا همسك دالة دالة من دوال التعامل مع النصوص وهشرحها بالتفصيل ، والله المستعان *-------------------------------------------------* الدالة Len (دالة بسيطة وسهلة وكلنا عارفينها ، وبنستخدمها في ورقة العمل : طبعاً إنتو لما بتقروا الحلقات بيكون فيه ملف إكسيل مفتوح (مش كدا ولا مطنشين) ، عشان نطبق أول بأول .. في الخلية A1 إحنا كتبنا نص ، عايزين نعرف طول النص ده ، فبنستخدم الدالة Len ، مثلاً في الخلية B1 اكتب المعادلة بهذا الشكل : =LEN(A1) واحد هيقولي إنت مش بتشرح VBA إنت بتخدعنا ، الشغل دا إحنا عارفينه !! أنا عارف إنكم عارفينه ، بس عايزين نربط بين الشغل في ورقة العمل والشغل في محرر الأكواد ، عشان تكون الصورة واضحة .. نروح للمحرر .. ونكمل الكود اللي كتبنا منه أول سطرين .. Dim strEmail As String Dim X As Integer strEmail = Range("A1").Value X = Len(strEmail) MsgBox strEmail & " : " & X أظن الكود واضح جداً ، إحنا الحمد لله وصلنا لمرحلة متقدمة نقدر من خلالها نفهم أسطر الكود .. هشرح الجديد بس عشان الناس متحسش بالملل : الجديد يا أستاذ عبد المجيد ، الدالة Len ، ودي وظيفتها إننا بنقدر من خلالها معرفة عدد أحرف النص ، والأحرف مش مقصود بيها الحروف العربية والإنجليزية فقط ، ولكن الرموز أيضاً بيتم حسابها زي علامة @ والنقطة .. لما ننفذ الكود هتطلع رسالة فيها النص الموجود في الخلية A1 وبعدين عدد أحرف النص .. وفصلت بينهم بـ : (Shift + ك) الدالة أسندناها للمتغير X وخلينا نوعه Integer لأن عدد أحرف النص عدد صحيح (ولا يمكن يكون فيه حرف بنشوفه ربع حرف زي . طبعاً لا ... ، الحرف يمثل عدد واحد صحيح) بعد كتابة الدالة وضعنا فتحنا قوس ووضعنا المتغير النصي اللي سميناه strEmail وقفلنا القوس ( ) ، ننفذ الكود هنلاقي النتيجة إن عدد الأحرف 17 (اتأكد بنفسك لو وقتك يسمح) *-------------------------------------------------* ننتقل لدالة تانية : الدالة InStr (شكلها صعبة .. لو عرفت اختصارها هتكون سهلة بإذن الله ..الحرفين In يعني (في) أو (داخل) .. والحروف Str اختصار String .. بمعنى تاني : الدالة دالة بحث عن نص داخل نص (فزورة .. وكلام معقد مش عايزين) .. بالمثال نفهم الكلام المعقد ..(نص فرعي أي جزء من النص داخل سلسلة نصية طويلة) ..بردو الكلام صعب نفترض إننا في الإيميل اللي كتبناه عايزين نعرف علامة @ موقعها فين في النص ، في الحالة دي هنستخدم الدالة InStr عشان نقدر نحدد موقعها (مش هنحتاج لـ GPRS خاصية البحث عن طريق الأقمار الصناعية) .. ناخد مثال عشان منتوهش !! Dim strEmail As String Dim X As Integer strEmail = "yakh777@yahoo.com" X = InStr(strEmail, "@") MsgBox X نفس المثال اللي فات تقريباً .. نركز على الجديد ، ونقول دا شكل الدالة ، تقريباً زي الدالة اللي فاتت بس نركز إن فيه بارامتر تاني ، البارامتر التاني هو عبارة عن النص المراد البحث عنه (يعني ممكن نقول إن النص عبارة عن كومة قش ، والنص الفرعي المراد البحث عنه عبارة عن إبرة ، فنشرح الدالة ببساطة إن الدالة بتقوم بعملية البحث عن إبرة في كومة قش .. !!) الناتج يا جماعة يا متابعين الحلقات بيكون عبارة عن عدد صحيح Integer ، لو جربنا الكود هنلاقي الناتج 8 ، أي أن موقع الإبرة في كومة القش رقم 8 (عد من الشمال يا حاج كمال) ممكن نكتب النص الأصلي مباشرةً بدل من إسناده لمتغير زي كدا : Dim X As Integer X = InStr("yakh777@yahoo.com", "@") MsgBox X بس أنا أفضل دايماً الإعلان عن المتغير ، وإسناد قيمة له ، لسبب إننا لما بنكتب كود ، مش هنشتغل على النص مرة واحدة .. الشغل هيكون أكتر من مرة .. فبالتالي أفضل المثال السابق. وجه الاستفادة من الدالة دي إنك تتأكد من وجود نص معين في النص الأصلي من عدم وجوده ، يعني لو مش موجود هتكون النتيجة ايه ؟ فكروا شوية قبل ما أقول الإجاية : أكيد صفر ، لأن النص الفرعي (الإبرة) مش موجودة ، بالتالي تكون النتيجة صفر..نجرب المثال التالي : Dim strEmail As String Dim X As Integer strEmail = "yakh777@yahoo.com" X = InStr(strEmail, "@") If X = 0 Then MsgBox "الإيميل غير صحيح ؛ لأنه لا يحتوي على العلامة اللي متعودين عليها" Else MsgBox "الإيميل صحيح يا فصيح ؛ لأنه يحتوي على العلامة اللي زهقنا من شكلها" End If نجرب ننفذ الكود مرة ، ونشوف النتيجة ، هنلاقي إن الرسالة التانية هي اللي هتظهر ، لأن قيمة X = 8 ، يعني أكبر من الصفر (ودا دليل على وجود الإبرة في كومة القش) أما لو شيلنا علامة @ وجربنا الكود مرة تانية ، فهتظهر لنا الرسالة الأولى ، لأن قيمة X=0 ، (ودا دليل على عدم وجود النص الفرعي في السلسلة النصية) بكدا يكون انتهى الكلام عن الدالة InStr ... لا لسه متستعجلش .. الدالة فيها بارامترات اختيارية واحد بيكون في الأول وواحد في الآخر ، الشكل العام لها كدا : InStr(start, Text_To_Search, Find, comapre إحنا أخدنا البارامتر التاني اللي هو كومة القش (النص المراد البحث فيه) ، والبارامتر التالت اللي هو الإبرة (النص المراد البحث عنه) .. بالنسبة للبارامتر الأول دا نقطة البداية ، ولما مش بنكتبها بيكون الافتراضي فيها 1 أي بداية عملية البحث والتنقيب عن الإبرة في كومة القش تبدأ من أول حرف بالنص.. البارامتر الأخير بردو اختياري ودا نادر الاستخدام .. ودا له 4 قيم : (vbUseCompareOption) , (vbBinaryCompare) , (vbTextCompare) , (vbDatabaseCompare) ناخد مثال بسيط عشان نفهم جزء واحد من الخيارات للبارامتر الرابع : Dim X As Integer X = InStr("This is my heart", "t") MsgBox X ننفذ الكود نلاقي إن الناتج 16 ، ودا موقع حرف t في النص ، نخلي بالنا إن فيه حرف الـ T في أول النص الأصلي ، طيب نفترض إننا عايزين نعرف موقع أول حرف T سواء كان Capital أي حرف كبير أو Small أي حرف صغير .. في الحالة دي هنستخدم البارامتر الرابع ، وهنستخدم الخيار vbTextCompare (وفي حالة استخدامه بيتم تجاهل حالة الأحرف) Dim X As Integer X = InStr("This is my heart", "t", vbTextCompare) MsgBox X ننفذ الكود نتصدم برسالة خطأ .. الغلطة فين ؟ هي مش غلطة ، إنما قاعدة ، إنك لو هتستخدم البارامتر الرابع اللي هو أصلاً اختياري يبقا إجباري عليك تستخدم البارامتر الأول اللي هو اختياري -- أما لو استخدمت البارامتر الأول اللي هو اختياري ، فممكن عادي تستغنى عن البارامتر الرابع اللي هو اختياري (هدوخكم ورايا .. اقرا من الأول عشان تفهمها ) .. يعني الشكل الصحيح يكون كدا : Dim X As Integer X = InStr(1, "This is my heart", "t", vbTextCompare) MsgBox X الناتج هنا هيكون مختلف ، هيكون رقم 1 ، ودا موقع حرف الـ T في أول النص (هنا تم التغاضي عن حالة الأحرف .. يعني كأننا بنقوله ملكش دعوة الحرف كبير أو صغير .. ابحث عنه) كفاية كدا على الدالة دي (خدت أكتر من وقتها) .. *-------------------------------------------------* ننتقل لدالة ثالثة اسمها StrReverse ودي من اسمها نعرف وظيفتها .. Reverse معناها عكس (مضاد : لا مش مضاد .. بقول عكس) يعني بص لها من الآخر .. يعني مثلا كلمة (أوفيسنا) لما بنصلها من الآخر تبقا (انسيفوأ) كدا أكيد وصلتكم ناخد مثال عملي : Dim strOfficena As String Dim strResult As String strOfficena = "أوفيسنا" strResult = StrReverse(strOfficena) MsgBox strResult نجرب الكود ونشوف النتيجة .. كفاية عليها كدا ، مش مستاهلة نتكلم عنها كتير .. *-------------------------------------------------* هختم الحلقة بالدالة الرابعة (نظراً لأن رقم 4 بيغيظ ناس .. وأنا بصراحة من النوع الغياظ المستفز) .. الدالة التوأم (دالتين هشرحهم مع بعض ) .. بس قبل ما نشرحهم نروح لورقة العمل ونكتب مثلاً yasser في الخلية B3 ، وفي الخلية المجاورة اكتب المعادلة : =UPPER(B3) والخلية B4 اكتب كلمة YASSER كلها حروف كبيرة ، وفي الخلية المجاورة اكتب المعادلة : =LOWER(B4) أظن الأمور واضحة بالنسبة لكم ، نرجع للمحرر ونشوف شكل الدالتين دول في المحرر : الدالة LCase أول حرف منها L اختصار Lower يعني زيها زي الدالة Lower في ورقة العمل ، والتانية UCase وحرف U اختصار لكامة Upper يعني زيها زي الدالة Upper بس خلاص .. مش محتاجة شرح .. ممكن ندعم الكلام بمثال فقط : Dim strName As String strEmail = "yasserkhalil" MsgBox UCase(strEmail) نجرب نفس المثال ، بس نخلي النص كله حروف كبيرة ، ونستخدم الدالة التانية LCase زي كدا : Dim strName As String strEmail = "YASSERKHALIL" MsgBox LCase(strEmail) نأتي إلى الواجب اللي الناس بطلت تعمله : اكتب كود ، وأعلن عن متغير نصي ، على أن يكون النص المراد تخزينه فيه العلامة @ ، وفي رسالة أظهر النص المخزن في سطر ، وعدد الأحرف للنص في سطر ، موقع العلامة @ في سطر ، وقم بعكس النص في سطر ، وقم بتحويل حروف النص إلى أحرف كبيرة في سطر ، وتحويل حروف النص إلى أحرف صغيرة في نص .. وكفاية كدا عشان متتعبوش ، أنا يهمني راحتكم. كان معكم أخوكم أبو البراء من منتدى أوفيسنا إلى لقاء متجدد بإذن الله .. دمتم في رعاية الله (خدوا بقا شوية ورد لأحسن أخونا ابن مصر شكله ناوي يخلص على الورد اللي في المنتدى :fff: :fff: .. كفاية 4 وردات) والسلام عليكم ورحمة الله وبركاته1 point
-
الحلقة العاشرة ************ السلام عليكم ورحمة الله وبركاته أقدم لكم اليوم حلقة كاملة الدالة MsgBox (وقد قدم لها الأخ الحبيب حسام عيسى موضوعاً كاملاً ، مما أخرني في تقديم الحلقة) .. عموماً هنتكلم عنها مرة تانية ، وفي الإعادة إفادة.. كلمة MsgBox اختصار للكلمة الإنجليزية Message Box أي صندوق الرسالة .. ودي وظيفتها إنك بتعرض رسالة للمستخدم تفيده بأمر معين .. لما نكتب الدالة MsgBox ، ونضغط مسطرة عشان ناخد مسافة ، بيظهر لنا مستطيل أصفر فيه توضيح لبارامترات الدالة .. كلها اختياري ما عدا البارامتر الأول اللي هو اسمه Prompt ، والبارامتر ده هو عبارة عن النص اللي هيظهر للمستخدم (وطبعاً مينفعش يكون اختياري وإلا مش هيكون فيه رسالة للمستخدم) بس إحنا ممكن نضحك على المحرر ، ونكتب السطر بالشكل ده : MsgBox "" هو كل اللي يهمه أقواس التنصيص .. هودا كل اللي يفهمه ، أما النص اللي بين أقواس التنصيص فدا ميعرفوش وميهموش ، اكتب أي كلام .. MsgBox "واخد على خاطري منكم" دي الرسالة اللي عايز أوصلها لكم أحبابي .. ودا سببه عدم المتابعة الجيدة للحلقات .. عموماً دا مش وقت للعتاب.. طيب واحد هيسأل : طيب كدا موضوع الدالة بسيط ومش محتاج حلقة ؟ أقوله البسيط هنعقده ، والمعقد هنبسطه .. تعالوا معايا نضع قيمة في الخلية D3 (كل اللي بيشرحوا مش عارف ليه مركزين على الخلية A1) أنا بحب التغيير - من باب خالف تعرف - ، وليكن القيمة 1500 عايزين نظهر القيمة الخاصة بالخلية في رسالة : MsgBox Range("D3").Value الرسالة هتظهر وفيها القيمة 1500 ، طيب ممكن نضيف عليها نص .. أكيد ممكن ! ليه لا! MsgBox "القيمة الموجودة يا أستاذ حسام في الخلية هي " & Range("D3").Value نلاحظ هنا إننا استخدمنا المعامل Concatenate اللي هو شكله & ، ودا وظيفته إنه بيدمج النصوص .. طبعاً القيمة اللي موجودة في الخلية D3 حتى لو كانت قيمة رقمية ، هنا مع دالة الرسالة مش بتشوفها رقم ، لكن بتشوفها نص (هنبص بعيون الدالة الجميلة) طيب ممكن نظهر قيمة خلية تانية .. أكيد ممكن ! ليه لا نضع القيمة 2000 في الخلية E4 ونجرب : MsgBox Range("D3").Value & Range("E4").Value هنلاقي إن قيمة الخلية D3 والخلية E4 لازقين في بعض ، دا لأنك مسبتش مسافة بينهم .. طيب المسافة هنعملها إزاي ؟ هو سؤال بسيط بس اعذروني أكيد فيه ناس بتسأله :: هنترك مسافة وبس .. لا .. هنعمل مسافة بالمسطرة بس بشرط تكون المسافة بين أقواس تنصيص زي كدا : MsgBox Range("D3").Value & " " & Range("E4").Value هنا نفس الكلام ربطنا بالمعامل & ، وعشان تكون المسافة مناسبة ضربت على المسطرة 3 مرات (معلش أصلي مضايق ومحتاج أضرب حد ، فملقتش غير المسطرة .. بس كفاية عليها 3 ضربات ..) واحد هيقولي أنا جربت الكود بس أنا مش عاجبني شكلهم جنب بعض ، ممكن نخلي كل قيمة في سطر .. أكيد ممكن ! ليه لا! MsgBox Range("D3").Value & vbNewLine & Range("E4").Value كلمة vbNewLine عشان نقدر ننزل لسطر جديد (وقلت قبل كدا بس محدش بيتابع إن فيه كلمة تانية بتؤدي نفس الغرض اسمها ايه يا شاكر؟ مش بقولكم محدش مذاكر .! اسمها vbCrLf ) يلا زيادة الخير خيرين .. وأضاف الأخ مختار كلمة جديدة أيضاً تؤدي نفس الغرض ألا وهي Chr(10) ربنا يسترها علينا وعليكم دنيا وآخرة. نشوف السطر ده : MsgBox ("الحمد لله الذي بنعمته تتم الصالحات") ايه الجديد يا أستاذ عبد المجيد ؟ الأقواس .. ممكن نستغني عنها ؟ آه ممكن .. ليه لا! .. بس الأقواس دي هنستفيد منها في إنك تخلي جملة MsgBox يمكن وضعها كقيمة في متغير (نصبر شوية هييجي الكلام عليها) .. طيب ايه هي الإضافات اللي نقدر نضيفها (هي زي البهارات حاجة كدا تحلي الأكله .. تخليها أحلى) ... إحنا قلنا البارامتر الأول خاص بالنص ودا إجباري (بس ممكن نخدع المحرر) ، البارامتر الثاني خاص بالأزرار Buttons .. الأزرار دي زي OK و Cancel و Retry وهكذا.. نجرب السطر التالي : MsgBox "هل تحب حلقات افتح الباب؟", vbOKCancel نلاحظ بعد نص الرسالة Prompt عملنا فاصلة , ودي عشان نقول للمحرر إننا هنضيف أزرار Buttons .. أول ما تعمل الفاصلة هتلاقي زي ما اتعودت قايمة فيها القيم اللي ممكن تستخدمها .. طيب لو نفذنا السطر اللي فات هنلاقي إن زر OK أو زر Cancel لو ضغطت عليهم مش هيحصل حاجة غير إنه يقفل الرسالة .. (قلنا نصبر هييجي عليها الكلام يا مستر عبد السلام) نتعرف على الأزرار الموجودة والمتاحة عندنا : vbAbortRetryIgnore vbOKCancel vbOKOnly vbRetryCancel vbYesNo vbYesNoCancel ممكن نجرب القيم دي ... القصة كلها في البادئة vb ثم الأزرار اللي هنستخدمها.. ننتقل لجزئية أخرى : مع نفس البارامتر الخاص بالأزرار ممكن نضيف رموز (علامة تعجب - علامة استفهام - ..) والرموز عشان نضيفها نضع علامة + بعد الأزرار التي سيتم استخدامها .. بالمثال يتضح المقال : MsgBox "هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion ممكن نتعرف على الرموز : vbQuestion vbInformation vbCritical vbExclamation طيب ممكن نستغنى عن الأزرار ونستعمل الرموز فقط ؟ أو ممكن نستغنى عن الرموز ونستعمل الأزرار فقط؟ أكيد ممكن ! ليه لا! (النهاردة واخدين حريتكم ..مفيش تقيد) هسيبكم شوية تجربوا الرموز دي ، وتشوفوا كل رمز شكله ايه؟ - فاصل ونواصل - واحد بعد ما شاف الرسالة ، لاحظ إن فيها عنوان Microsoft Excel فسألني ممكن أغير العنوان ده ؟ رديت عليه وقلت له (طبعاً عارفين الإجابة) عنوان الرسالة هو دا البارامتر التالت .. ود اسمه Title (ونلاحظ إن البارامتر لما يكون اختياري بيوضع بين أقواس بهذا الشكل [ ] ) نجرب السطر التالي : MsgBox "هل تحب حلقات افتح الباب؟", , "منتدى الأحبة" ايه دا بقا إنت عامل فاصلتين ليه؟ يا سيدي ما أنا قلت لك إن البارامتر التاني الخاص بالأزرار والرموز دي اختياري ، بمعنى يمكن الاستغناء عنه ، بس عشان نعديه لازم فاصلة ، وبعد الفاصلة فاصلة تانية ، يقوم المحرر يفهم إنك استغنيت عن البارامتر التاني ، ويشتغل على البارامتر التالت .. اللي هو عنوان الرسالة.. نجرب ونشوف ! ننتقل لأهم نقطة في حلقة اليوم ألا وهي تعيين الرسالة كمتغير ، عشان ببساطة ننفذ كود معين لو المستخدم اختار زر وننفذ كود تاني لو اختار زر تاني (أكيد الكلام يتوه ..خلينا في التطبيق) Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") نخلي بالنا إننا هنا هنستخدم متغير باسم Answer (ممكن تسميه بالاسم اللي يعجبك) ، والمتغير ده هيكون له قيمة (الرسالة مجرد ستارة .. والقيمة مخفية .. والقيمة دي هنعرفها حالاً) لو حبينا ننفذ كود معين في حالة اختيار معين ، هنستخدم الجملة If الشرطية ، يعني ببساطة لو المتغير Answer قيمتة كذا اعمل كذا ، ولو قيمته كذا اعمل كذا .. Sub Query() Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") If Answer = vbYes Then MsgBox "كدا حبيبي وصاحبي وكفاءة" ElseIf Answer = vbNo Then MsgBox "زعلت منك ..روح ربنا يسامحك" End If End Sub أظن المثال واضح ، في حالة إذا كانت قيمة Answer تساوي vbYes ، هينفذ السطر التالي ويظهر رسالة بمحتوى معين ، ولو كانت القيمة vbNo هيظهر رسالة تانية .. واحد هيقولي هو كله رسايل رسايل مفيش شات .. طبعا الأسطر اللي هيتم تنفيذها مش شرط تكون رسالة ، دا مجرد مثال عشان تفهم كيفية استخدام المتغير .. لكن ممكن تنفذ مجموعة أسطر من الأكواد في حالة vbYes ، ومجموعة أسطر أخرى من الأكواد في حالة vbNo ... ركز وخلي بالك من الكود التالي : Sub Query() Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") If Answer = 6 Then MsgBox "كدا حبيبي وصاحبي وكفاءة" ElseIf Answer = 7 Then MsgBox "زعلت منك ..روح ربنا يسامحك" End If End Sub كلنا اللي عملناه شيلنا vbYes وحطينا رقم 6 ، وشيلنا vbNo وحطينا رقم 7 (ايه دا بقا ..طيب هنعرف منين اللي إنت بتقوله ده ..فيه جدول بقيمة كل زر من الأزرار .. يرجى عدم الحفظ) فيه حاجة مهمة نسيت أقول عليها : لو لاحظتو إن الرسائل كلها وعنوان الرسائل بتظهر ناحية اليسار ، عشان نخليها يمين (ربنا يجعلنا من أهل اليمين) نجرب الكود التالي : MsgBox "هل تحب حلقات افتح الباب؟", vbMsgBoxRight, "منتدى الأحبة" آخر جزئية هنتكلم فيها .. مش هنتكلم فيها (فيه ملف مرفق فيه توضيح لآخر جزئية .. أنا بس هشرح نقطة واحدة في الملف المرفق ، وإنتو إن شاء الله المولى هتفهموا الباقي) الأزرار والرموز اللي عدت علينا في الحلقة ، ممكن نستغنى عنها بقيم ..إزاي ؟ MsgBox "هل تحب حلقات افتح الباب؟", vbYesNoCancel ممكن السطر ده يكون بالشكل ده : MsgBox "هل تحب حلقات افتح الباب؟", 3 يعني القيمة 3 = vbYesNoCancel .. مثال تطبيقي : ------------ Sub Query() Dim Answer As String Answer = MsgBox("هل تريد الدخول لتطبيق الإكسيل لتطبيق الأكواد في حلقات افتح الباب؟", vbYesNoCancel) If Answer = vbYes Then MsgBox "تفضل بالدخول .. بيتك ومطرحك ، وإن شاء الله تستفيد" ThisWorkbook.Activate ElseIf Answer = vbNo Then MsgBox "أكيد مشغول عشان ناوي تقفل .. عموماً تصحبك السلامة وفي رعاية الله" ActiveWorkbook.Save Application.Quit End If End Sub وأخيراً أتمنى أن أكون قد وفقت في توصيل المعلومة لكم بشكل مبسط .. دمتم في رعاية الله .. MsgBox Values.rar1 point
-
الحلقة الثامنة *********** السلام عليكم ورحمة الله وبركاته أسعد الله أوقاتكم إخواني الكرام في الصرح العملاق هنتكلم النهاردة عن نافذة مهمة جدا ومهمشة في الشروحات إلى حد كبير .. النافذة اسمها (النافذة الفورية Immediate Window) ودي بتفكرني بالخميرة الفورية .. تلاقي ست البيت مستعجلة ع العجين ، ومعندهاش صبر ، كتر خيرها وراها فيس بوك مش فاضية للعجين ، تقوم تستخدم الخميرة الفورية عشان العجين يخمر بسرعة ..(واحد هيقولي إنت شكلك شغال في فرن) ! نفس الفكرة معانا بردو مع النافذة الفورية اللي هنتكلم عليها ، بمعنى لو فيه سطر معين من الأكواد عايز تشوف نتيجته بشكل فوري ، يبقا هو دا المكان المناسب عشان تحصل على النتيجة السريعة .. أولاً قبل ما ننسى وياخدنا الكلام ، إحنا بنظهر النافذة دي من قايمة View ثم Immediate Window ، واللي هيركز هيلاقي الاختصار الخاص بيها CTRL + G بتظهر النافذة دي أسفل المحرر ودي من ضمن هيكلة محرر الأكواد ، ممكن تتحكم في حجمها من خلال سهم بيظهر في المربع الأحمر في الصورة دي : المهم هي دي النافذة الفورية ، بصراحة أداة رائعة للي يفهمها كويس ، ممكن من خلالها تنفيذ الأكواد بشكل سريع ، وممكن تجاوبك على الأسئلة بشكل فوري وهنشوف الكلام ده بالأمثلة ، وبتستخدم لتصحيح الأخطاء البرمجية Debugging ، وكمان تستخدم لإظهار نتائج الكود .... الكلام النظري مش هيفيد زي العملي .. فلنبدأ الحلقة : أولا هنشتغل محققين (أخيرا الواحد ياخد وضعه - مش هنفضل كدا ملطشة دايما ، إحنا اللي دايما بنتسأل ) إحنا نسأل وهو يجاوب ، ومننساش الإجابة هتكون فورية ... طبعاً كل اللي ظاهر قدامنا مجرد مؤشر الماوس واقف في أول النافذة .. إحنا اتعودنا إن السؤال دايما بيكون آخره علامة الاستفهام ، هنا الوضع مختلف ، إحنا هنحط علامة الاستفهام في الأول عشان نخض النافذة كأننا بنقولها انتبهي هسألك ، وجاوبي في الحال : نكتب مثلاً السطر التالي (نكتبه يا كابتن حسام مش ننسخه) ?Rows.Count أو ? Rows.Count ممكن بعد علامة الاستفهام نترك مسافة أو لا نترك ، الأمر سيان ، وممكن مؤشر الماوس يكون في نهاية السطر أو في أي مكان داخل السطر ، الأمر سيان .. بعد ما نكتب نضغط Enter نلاقي الإجابة في التو وفي الحال (ونعم النافذة المطيعة) السطر اللي فات هيعد عدد الصفوف في ورقة العمل (1048576) .. الإجابة هتكون من غير أقواس ? Columns.Count عدد الأعدمة في ورقة العمل ، الإجابة (16384) محدش يجرب يعد الخلايا لأن دا هيسبب حاجة اسمها Overflow (جرب بنفسك هيطلع لك رسالة خطأ) نجرب نعد أوراق العمل ? Worksheets.Count أو ? Sheets.Count نجرب نفتح مصنفين مثلاً ونجرب السطر التالي ? Workbooks.Count السطر الأخير لعد المصنفات المفتوحة!! ناخد أمثلة تانية ، هو مفيش غير أسئلة العد دي .. لا طبعا الأسئلة كتير ، بس أنا بقول بالمرة نتعلم أسطر جديدة عشان نستفيد منها في التطبيق العملي طيب نخلي نافذة الإكسيل ونافذة المحرر جنب بعض زي ما اتعلمنا قبل كدا ، ونضع في الخلية B4 القيمة 100 ، وبعدين كليك يمين وتنسيق خلايا ، ونخلي تنسيق الخلية كعملة بالجنيه المصري مثلاً ، ونلونها باللون الأصفر بلاش الأحمر اللي الناس هتبدأ تتعقد منه ، ونخلينا واقفين في الخلية B4 بحيث تكون الخلية هي الخلية النشطة ActiveCell.. نرجع للفورية (النافذة الفورية إنتو لحقتو تنسوا !! ربنا يستر عليكم من الزهايمر) ، ونكتب السطر التالي لمعرفة قيمة الخلية B4 : ? Range("B4").Value ونجرب السطر التالي لمعرفة تنسيق الخلية B4 اللي هي الخلية النشطة : ? ActiveCell.NumberFormat ونكتب السطر التالي لمعرفة عرض العمود للخلية النشطة : ? ActiveCell.ColumnWidth ونكتب السطر التالي لمعرفة عنوان الخلية النشطة : ? ActiveCell.Address ونكتب السطر التالي لمعرفة رقم صف الخلية النشطة : ? ActiveCell.Row ونكتب السطر التالي لمعرفة رقم عمود الخلية النشطة : ? ActiveCell.Column ونكتب السطر التالي لمعرفة رقم اللون الداخلي للخلية النشطة (مش لون الخط Font ) : ? ActiveCell.Interior.Color ونكتب السطر التالي لمعرفة اسم ورقة العمل اللي موجودة فيه الخلية النشطة : ? ActiveCell.Parent.Name في السطر الأخير الكلمة Parent في اللغة الإنجليزية معناها (أحد الوالدين .. وأنا هترجمها الأم ؛ لأن الأم متوصي عليها 3 مرات) ، فالخلية النشطة جزء صغير من الحضن الكبير اللي هو ورقة العمل ، فبالتالي الخلية بمثابة الابن ، وورقة العمل بمثابة الأم ، ففي السطر اللي فات عايزين نعرف اسم الأم للخلية النشطة (واحد هيقولي النتيجة هتطلع كريمة مختار ..ما هي بتطلع بدور الأم دايما ) .. أنا بالفعل خليت اسم الشيت (كريمة مختار) فطلعت النتيجة (كريمة مختار) بس الاسم من غير أقواس .. أنا طولت في الجزئية اللي فاتت عشان نقدر نستفيد كمان من الأكواد المختلفة عشان نبدأ نتقدم في مرحلة التعلم بشكل أسرع (وعشان كمان عجباني شغلانة المحقق دي بصراحة ..أنا أسأل وهو يجاوب !!) ننتقل لجزئية تانية : النافذة دي ليها دور تاني غير اللي عملناه من شوية ، إننا نقدر من خلالها ننفذ الكود مباشرة ، بس بشرط يكون الكود سطر واحد ناخد مثال تطبيقي عملي ، ونكتب السطر التالي لتغيير لون التاب Tab (التبويبات المختلفة لأوراق العمل) - مننساش قبل ما نضغط إنتر نبص على لون التبويب لورقة العمل النشطة ActiveSheet : ActiveSheet.Tab.Color = vbRed لو معجبكش اللون خليه vbYellow ، ولا تزعل نفسك يا منير !! السطر ببساطة بيتعامل مع ورقة العمل النشطة (مش الخلية النشطة نخلي بالنا) وبعدين Tab للتعامل مع التبويبات لأوراق العمل ، وأخيراً Color لتحديد قيمة للون التاب ، ونخلي القيمة اللون اللي يناسبنا .. بكدا نعرف معلومة جديدة إننا ممكن ننفذ الكود من خلال النافذة الفورية ، ونشوف نتيجة تنفيذه في ورقة العمل مباشرةً.. نجرب السطر التالي لتنسيق عرض الأعمدة من A إلى D بمقدار 5 : Columns("A:D").ColumnWidth = 5 ونكتب السطر التالي لجعل ورقة العمل المسماة Sheet1 مخفية : Worksheets("Sheet1").Visible = False أو Sheets("Sheet1").Visible = False ولإظهارها بنغير القيمة False إلى القيمة True .. وممكن نستغنى عن القيمتين دول ، لو عايزين نتعلم الصح هنا .. هنتعلم من خلال الأسطر القادمة التعامل مع الخاصية Visible >> بالنسبة للخاصية Visible ممكن نحط لها قيمة من 3 قيم : -1 أو xlSheetVisible (لإظهار ورقة العمل ...) * القيمة 0 أو xlSheetHidden (لإخفاء ورقة العمل ..) * القيمة 2 أو xlSheetVeryHidden (لإخفاء ورقة العمل ..) محدش منتبه ليه ؟ شكلي كدا هبطل الحلقات بسبب عدم التركيز .. القيمة 0 والقيمة 2 للخاصية Visible نفس الوظيفة (طبعا ً لا .. طبعاً لأ) أمال ايه الموضوع ؟ ايه الفرق؟ القيمة 0 ، دا إخفاء عادي ، يعني ممكن لو أي مستخدم عنده خبرة وعمل كليك يمين على التاب الخاص بأسماء أوراق العمل ، هيلاقي الأمر Unhide ، هيضغط عليه هيلاقي الورقة المخفية ، فيقوم يظهرها .. أما القيمة 2 ، فدا الإخفاء السوبر (زي التطشيب السوبر لوكس) ، دا بقا يخلي المستخدم لو عمل كليك يمين في المكان اللي قلنا عليه ، هيلاقي الأمر Unhide مش أكتيف مش نشط ..! ولإظهار الورقة في هذه الحالة لابد من الدخول على محرر الأكواد ، ومن النافذة properties (ودي لو مش ظاهرة بنضغط F4 تقوم تطل علينا بطلعتها البهية ) ، هنحدد ورقة العمل المسماة Sheet1 ونشوف نافذة الـ Properties في آخرها هنلاقي الخاصية Visible نختار منها أول اختيار الخاص بإظهار ورقة العمل .. أو نستخدم الكود لإظهارها .. السطر اللي المفروض نكتبه هيكون بالشكل ده : Sheets("Sheet1").Visible = -1 خلاصة الجزئية اللي فاتت إننا ممكن ننفذ الأكواد عن طريق النافذة السحرية (أنا حر في تسميتها ..بلاش تعترض يا مدحت) ننتقل لجزئية جديدة ، مع اسستخدام جديد للنافذة العبقرية ، ألا وهي تصحيح الأخطاء البرمجية (ودا الاستخدام الشائع ليها) ودا بيطلق عليه Debugging .. الأخطاء البرمجية بيطلق عليه Bugs (بق : لأن البق حشرة ضارة ، زيها زي الخطأ البرمجي ضار بالكود) قبل ما نسرد في الشرح نتعرف على كائن اسمه Debug ودا بيستخدم في الأكواد عشان يطبع (بس مش على ورق ..أمال هيطبع على ايه ؟؟ هيطبع النتائج في النافذة الفورية) ، والخاصية المرتبطة بهذا الكائن الخرافي اسمها Print ، ونرجع تاني بالذاكرة عشان نتذكر المعلومة اللي ذكرناها عن الفعل Print إنه Method .. ناخد مثال عملي عشان نفهم إزاي نستخدم الكائن Debug ، أدرج موديول جديد ، وضع فيه هذا الإجراء الفرعي : Sub ErrorCode() MyRandomNumber = Rnd() / 0 End Sub فيه دالة بالإكسيل اسمها Rand لعمل أرقام عشوائية بين الصفر والواحد ، ولو حبينا تكون الأرقام العشوائية بين الصفر والعشرة مثلاً نضرب * 10 داخل ورقة العمل قم بتحديد مجموعة خلايا واكتب المعادلة التالية ثم اضغط Ctrl + Enter ، ولتجربة المعادلة اضغط F9 =RAND()*10 المقابل للدالة دي في محرر الأكواد Rnd ووراها قوسين ، يعني الاختلاف في حرف واحد زيادة في الدالة (يا عم بيل جيتس يعني فرقت معاك في الحرف ده ، ما كنت خلتها نفس الحروف !!) يرجع مرجعونا للكود : المتغير وضعنا له قيمة رقم عشوائي على صفر (وعارفين في الرياضيات أنه لا يمكن القسمة على صفر) يعني هذه القيمة تعتبر باطلة ننفذ الكود هنلاقي رسالة خطأ بتقول : Divison By Zero ، نضغط على إنهاء للخروج من نافذة الخطأ .. ممكن واحد مذاكر شوية يقول فيه جملة أنا حافظها عشان أتلاشى رسالة الخطأ : On Error Resume Next والجملة دي نحطها قبل السطر اللي فيه الخطأ البرمجي .. دلوقتي لو نفذنا الكود هنلاقي إن مفيش حاجة حصلت ، طيب نضيف سطر أخير زي كدا : Sub ErrorCode() On Error Resume Next MyRandomNumber = Rnd() / 0 Debug.Print Err.Description End Sub السطر الأخير بيتعامل مع النافذة الفورية ، ننفذ الكود وعنينا على النافذة الفورية .. نفذتوا الكود :: نلاحظ الجملة دي ظهرت في النافذة الفورية Division by zero ، ودي وصف للخطأ البرمجي الموجود داخل الكود .. كلمة Err دي اختصار لكلمة Error (خطأ) ، وبعدين نقطة فتظهر الخواص المرتبطة بكلمة Err ، هنلاقي كلمة Description ودي معناها وصف .. خلاصة لكلام وصف الخطأ . والناتج هيظهر لي في النافذة الفورية .. معلومة تانية ، ممكن ننفذ الكود من خلال النافذة الفورية عن طريق أمر اسمه Call وبعديه مسافة متبعة باسم الإجراء الفرعي أو الدالة بهذا الشكل Call ErrorCode() وممكن نكتب القوسين أو منكتبهمش الأمر سيان !! ناخد مثال تاني على دالة UDF دالة معرفة ، ودي اتكلمنا عليها الحلقة اللي فاتت .. هنعمل دالة بسيطة على السريع ، عشان نطبقها في النافذة الفورية : Function MyName() As String MyName = "YasserKhalil" End Function نكتب ايه في النافذة الفورية ؟؟ في حالة الإجراء الفرعي من شوية كتبنا الأمر Call متبوع بمسافة وبعدين اسم الإجراء الفرعي عشان أقدر أنفذ الكود داخل النافذة الفورية ، أما بالنسبة للدالة Function فبنستخدم علامة استفهام في البداية ? MyName جرب الأمر Call قبل MyName وجرب تشيله مرة ، هتلاقي مفيش نتيجة تظهر لك .. الشكل الصحيح في السطر اللي فات وبس يبقا نخلي بالنا في حالة استدعاء الإجراء الفرعي بنستخدم Call ، أما في حالة الدوال فبنستخدم علامة استفهام قبل اسم الدالة .. نرجع تاني للكائن Debug هل الكائن الخرافي ده مرتبط بالأخطاء فقط ؟؟ الإجابة لا ، هو بييجي وراه كلمة Print لطباعة أي نتائج .. وكمثال أخير عشان الحلقة طولت : Sub PrintX() For X = 1 To 5 Debug.Print X Next X End Sub في الكود الموجود يا عبد الودود فيه حاجة في الـ VBA اسمها الحلقة التكرارية ، ودي مش هشرحها ، لأن فيه موضوع في توقيعي خاص بالحلقة التكرارية For.. Next ، ومرفق بالموضوع ملف فيديو في المشاركات (يرجى الرجوع إليه ..) ما بين سطرين الحلقة التكرارية الأمر اللي بيقوم بطباعة قيمة المتغير X في النافذة الفورية .. ركز في النافذة السحرية هتلاقي النتايج الفورية ، على ما خلصت الحلقة ديا أنا طلعت عينيا .. يارب تكونوا استفدتوا بنسبة 100% ، وإلى لقاء مع حلقة مفيدة ومجدية ، أترككم في حفظ الله . مثال آخر : لمزيد من التوضيح (مثال بدون شرح) >> حلقة تكرارية لأوراق العمل الموجودة داخل المصنف << (الواجب تنفيذ الكود وشرحه) Sub List_Sheets() Dim WS As Worksheet For Each WS In Worksheets Debug.Print WS.Name Next WS End Sub كان معكم المحقق أبو البراء من نيابة أوفيسنا .. والسلام حسن الختام ...1 point
-
الحلقة السادسة ************ أهلا بكم إخواني الأحباب مع حلقة جديدة ، والحلقة دي استكمال لحلقة المتغيرات .. كنا اتكلمنا عن نوعين من المتغيرين باستفاضة (3 مرات على ما الكلمة اتكتبت معايا ) ..اتكلمنا عن النوع Integer ودا بيكون للأرقام الصحيحة ، والنوع String ودا بيكون للقيم النصية. نكمل رغي عن المتغيرات عشان نخلص منها ونخلص عليها .. بداية أحب أعرفكم بدالة في VBA اسمها CINT ..الدالة دي وظيفتها إنها بتحول أي قيمة لعدد صحيح من النوع Integer (ودي اختصار Convert Integer..الحرف الأول من Convert وأول 3 حروف من Integer) >> الكلام مش هيفيد بقدر التطبيق :: نجرب المثال التالي Dim LValue As Integer LValue = CInt(8.45) MsgBox LValue لو نفذنا الكود هنلاقي إن القيمة أصبحت 8 .. طيب نغير الرقم إلى 8.5 ونشوف النتيجة بردو نفس القيمة 8 .. طيب نغير الرقم ونخليه 8.6 خلي بالك متتوقعش 8 ، القيمة بقت 9 (تسعى في الخير) الملاحظات المستفادة : إن الكسر لو أقل من أو يساوي 0.5 .. القيمة بتتقرب لتحت ، أما لو الكسر أكبر من 0.5 يبقا يتقرب لفوق ..(يعني الدالة دي ممكن نستفيد منها في أمور تانية .. زي التقريب) جرب القيمة 8.50001 .. جربتو : أكيد لا نازلين قراية وخلاص .. اللي جرب هيتأكد من إن : لو هفوة مفيش تفاهم!! نراجع مرة تانية المتغير Integer بمثال عملي : Dim nRowCount As Integer nRowCount = Rows.Count MsgBox nRowCount أولاً عايزين نتعلم شيء مهم جداً وإحنا لسه في البداية : إننا لما نيجي نسمي متغير يا ريت يكون الاسم وصفي (يعني كل المتغيرات عندي هسميها وصفي ..شكلك بتعزه يا أستاذ ...طيب ما نسميه شوقي أو مراد ..لازم وصفي ) .. يا جدعان انتو فهمتوني غلط أنا أقصد بكلمة وصفي إنه يوصف الاسم بشكل كويس .. يعني مثلا نشوف نوع المتغير نلاقيه Integer فنقوم في أول الاسم نحط مثلا n عشان يوضح لأي حد يقرا الكود إنه Interger ، وبعد الحرف الدلالي n نكتب اسم للمتغير يكون دال عليه .. أنا مثلا هعد الصفوف فاقوم أكتب RowCount .. يبقا في النهاية اسم المتغير nRowCount ...طبعا اللي بقوله ده مش الزامي ..دي عادة حسنة بيتبعها المبرمجون المحترفون ..مش الاقي ناس تكتب mghy حاجة كدا ملهاش دلالة على اسم المتغير ...!! السطر التاني وضعنا قيمة للمتغير وهي Rows.Count وطبعا كلمة Count دي Method بمعنى (عد) ، ودي وظيفتها إنها تعد بس تعد ايه .. تعد الصفوف Rows واحد يقولي طيب ممكن أعد الأعمدة أقوله أيوا Columns.Count مفيش مشكلة .. واحد يقولي يعني ممكن أعد الخلايا في نطاق معين زي A1:C5 ، بردو مفيش مشكلة Range(Cells(1, 1), Cells(5, 3)).Count المهم خلينا في السطر التالت (محدش يخرجني برا الموضوع) .. مش محتاج شرح ..إظهار قيمة عدد الصفوف في رسالة ننفذ الكود (رسالة خطأ .. ميهمكش من الفشل .!! ) واحد هيسألني طيب الغلطة فين ..كل حاجة زي الفل .. المحرر دا بيستعبط ! أنا مش هشتغل على المحرر دا تاني سلااام .. هرد عليه وأقوله اصبر بس كل الحكاية إننا بنتعامل بقواعد وقوانين ..أنا لما عرفت المتغير حددت نوعه بـ Integer ودا بيكون للأرقام الصحيحة ما بين 32, 767 و القيمة السالبة -32, 768 يعني ببساطة بيتعامل مع الأرقام دي وبس ..ميقدرش يتعامل مع أكبر من كدا .. طيب ايه الحل ؟ ايه البديل ؟ البديل المتغير Long دا بيتعامل مع الأرقام الصحيحة بردو ، بس ما بين 2,147,483,647 -2,147,483,648 طيب نرجع للكود بتاعنا ..عدد الصفوف في إكسيل 2007 مثلا يساوي 1048576 ، والمتغير Integer قلنا إن صحته على أده ، فيقوم المتغير Long ييجي ويشيل.. يبقا كل اللي هنغيره كلمة واحدة عشان الامور تمشي تمام (نشيل Integer ونحط Long) يعني ممكن الكود يكون بالشكل ده (لاحظوا أنا هغير البادئة في اسم المتغير إلى L اختصار Long) Dim LRowCount As Long LRowCount = Rows.Count MsgBox LRowCount بكدا نكون اتعرفنا على Integer و Long في حالة التعامل مع الأعداد الصحيحة. ننتقل لجزئية جديدة .. التعامل مع الأرقام اللي فيها كسور عشرية.. مش هنطول في الكلام ، هناخد باختصار مثال عملي عشان نفهم الدنيا ماشية إزاي Dim FloatingPoint As Single FloatingPoint = 10 / 3 MsgBox FloatingPoint طيب نغير كلمة Single بكلمة Double ونلاحظ الفرق..!! مش هشرح الفرق لكن هقول إن اللي فهم الفرق بين Integer و Long ، هيفهم الفرق بين Single و Double ... حازم رفع ايده وقالي لأ يا باشا اشرحها بردو (حاضر يا عم حازم حازم هنشرحها عشان نأكد المعلومة بس مش أكتر ) لما استعملنا النوع Single نلاحظ إن عدد الأرقام العشرية 6 بس ، أما Double فنلاقي إن اللي على يمين العلامة 14 رقم (جرب الكود مرة كدا ومرة كدا وعد بنفسك (فيه ناس هتكسل)) نقطع على الجماعة المدرسين اللي بدوا رياضيات ، ونقول إن مساحة الدائرة = ط نق2 ، والله مش عارف إذا كان صح ولا غلط عموما القيمة ط = 22/7 ، ودي موجودة في الإكسيل باسم Pi ، يعني لو كتبنا في خلية =PI() هيديني قيمة الـ ط ... المهم نستفيد في المثال التالي معلومة جديدة (إننا ممكن سنتخدم بعض الدوال الموجودة في الإكسيل ونطبقها في الـ VBA) Dim FloatingPoint As Single FloatingPoint = WorksheetFunction.Pi MsgBox FloatingPoint نخلي بالنا إننا وضعنا قيمة للمتغير واستخدمنا WorksheetFunction عشان أقول لمحرر الأكواد إننا هنستخدم دالة ، وبعدين نقطة Period وبعدين اسم الدالة هنا Pi ومفيش أقواس (دا الاختلاف ..لما استخدمناها في ورقة العمل كان لازم أقواس أما هنا فلا يتم استخدامها .. نجرب مرة المتغير Single ومرة المتغير Double ..(أي خدمة يا حازم حازم .. منستغناش عن خدماتك يا متسر ياسر ياسر ) نكمل كلام عن المتغيرات عشان نخلص منها : نتكلم عن المتغير التقيل Variant ودا بنستخدمه لما نكون مش عارفين نحدد القيمة هل هي رقم ولا نص ولا كائن Object ولا ولا (ولى زمن الجهل وأقبل زمن التعلم) .. فبنستخدمها ..بس نخلي بالنا إنها بتستهلك مساحة من الذاكرة فكثرة استخدامها بتخلي التعامل مع الأكواد يكون بطيء .. المتغير اللذيذ Boolean ودا يا أبيض يا أسود .. يا صح يا غلط .. يا True يا False .. يا 1 يا صفر بتكون القيمة المخرجة إحدى قميتين فقط Dim bOfficena As Boolean MsgBox bOfficena هنا حددنا نوع المتغير بـ Boolean .. لما ننفذ الكود هنلاقي رسالة فيها False (نفهم من كدا إن الاختيار الافتراضي هو False) يعني مش زينا بنفترض حسن النية ، لا دا ماشي بمبدأ المتهم مجرم حتى تثبت براءته ، فهنا وضع القيمة False للمتغير .. نجرب نضع القيمة صفر Dim bOfficena As Boolean bOfficena = 0 MsgBox bOfficena هنلاقي نفس الناتج اللي فات False ..!! نغير شوية ونخلي القيمة أي قيمة غير الصفر ، هتلاقي الناتج True فيه متغيرات تانية زي Date للتعامل مع التواريخ ، والمتغير Currency للتعامل مع العملات وبكدا كفاية أوي على المتغيرات .. المهم في الموضوع الفكرة تكون وصلت .. للمزيد من الشروحات يرجى الإطلاع على الدورة الرائعة التي يقوم بها أخونا محمود الشريف (كلنا بنكمل بعض ..دا شعارنا في المنتدى ..أنا بس مجرد واحد معاه مفاتيح ..هديكم نسخة منها عشان تعرفوا تفتحوا الباب يا أحباب) كان معكم صانع المفاتيح Keys Maker أخوكم أبو البراء وإلى لقاء في حلقة جديدة من حلقات افتح الباب واهرب من الشباك .. دمتم بود .. تقبلوا حبي وأشواقي وتحياتي القلبية1 point
-
1 point
-
1 point
-
قوائم بشكل جديد في الاكسيل .... تصلح للاستخدام في برنامجك .. بطريقة بسيطة السلام عليكم الاساتذة الافاضل اخواني الاعزاء اقدم لكم هذا الملف به قوائم مصممه باستخدام الفورم بطريقة بسيطة وسهله وبها بعض الاوامر علي سبيل المثال ويمكنكم تغييرها بالطبع لتتناسب مع طبيعة وتصميم برنامجكم ... ومن الجدير بالذكر ان الاستاذ الغائب الحاضر / الحسامي ... له ملف رااائع بهذا الموضوع وقوائم ولا اروع ولا احلي من كده وهو اول من قام بهذه الفكرة ( الحقوق محفوظة ) وطبعا هذا الملف بجواره لا شئ ... ولكنني استخدمت اسهل وابسط الطرق الممكنه لعمل ذلك وكنت قد صممتها لاستخدامها في برنامج لدي واحببت ان اطلعكم عليها واطلع علي رأيكم فيها واوجة القصور الموجودة فيها وتجربتها علي اكثر من جهاز قبل العمل النهائي عليها حيث لدي مقاس الشاشة 19" مستطيل Resolution 1366 x 768 نسخة اوفيس 7 اوفيس 2003 ، اوفيس 2007 ارجو ان تنال رضاكم جزاكم الله خيرا قوائم جديدة لاي برنامج تصممه بنفسك.rar1 point
-
السلام عليكم فيما يلي ملخصا لعدة مواضيع تعليمية في الأكسس من اعداد بعض الأعضاء المميزين سلسلة الأمثلة المشروحة في الأكسس سلسلة دروس أكسس 2007 دروس قصيرة لحركات جميلة في الأكسس شرح كيفية ادخال الكود للمبتدئين بالصور1 point
-
الاخ الحبيب rudwan جزاكم الله خيرا على هذا الموضوع القيم و الجديد اسمح لى أن أشارك بهذا الموضوع و جزاكم الله خيرا و نفع بكم1 point
-
1 point
-
خامسا : التقارير رسم جدول في التقرير برمجيا بالكود كما في الوورد تنسيق السجلات الى أطول سجل بنفس الحقل في حال الحقول قابلة للتمدد تنسيق الحقول الى أطول حقل موجود في التقرير مشكلة الصفحة الثانية العمود يأتي زاحفا الى اليمين كود لقياس سرعة فتح التقرير تنسيق طباعة رقم الصفحة كيفية وضع هوامش مختلفة لكل صفحة كود التحكم بعدد نسخ التقرير و عدد الصفحات المطبوعة منه كود التحكم باتجاه الطباعة و مقاس هامش الصفحة اضافة رسم خلفي للتقرير اظهار رسالة عند عدم وجود بيانات للتقرير اخفاء اشارة خطأ في مربع النص عند عدم وجود بيانات للتقرير صانع التقارير - كود يمنحك الفرصة لتصميم تقاريرك من معالج خاص أثناء الطباعة عمل ترقيم مسلسل لسجلات التقرير كيفية التحكم بعدد سجلات كل صفحة في التقرير كيفية وضع صورة كخلفية للتقرير فتح التقرير على سجل محدد توسيط محاذاة النص داخل الحقول تدوير مجموع كل صفحة الى راس الصفحة التالية معاينة التقارير عن طريق اختيارها من مربع تحرير و سرد التحكم بهوامش التقرير من الأعلى عرض بيانات التقرير في عمودين بصفحة واحدة بدلا من صفحتين اختيار سجلات محددة من النموذج و طباعتها1 point
-
يمكنك عمل ذلك باستعلام حذف ، يكون فيه شرط التاريخ الذي تريد أو يمكنك تنفيذ الامر المناظر بالكود مثل DoCmd.RunSQL "DELETE Table1.date2 FROM Table1s WHERE (((Table1.date2)<#1/1/2004#));" للمزيد حول استعلامات الحذف راجع هنا فهرس دورة الأكسس http://www.officena.net/ib/index.php?showtopic=2281 point
-
1 point