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

نجوم المشاركات

  1. ياسر خليل أبو البراء

    ياسر خليل أبو البراء

    المشرفين السابقين


    • نقاط

      17

    • Posts

      13165


  2. إبراهيم ابوليله

    إبراهيم ابوليله

    المشرفين السابقين


    • نقاط

      13

    • Posts

      2850


  3. مختار حسين محمود

    • نقاط

      12

    • Posts

      944


  4. محمد حسن المحمد

    • نقاط

      12

    • Posts

      2220


Popular Content

Showing content with the highest reputation on 09/17/15 in all areas

  1. اخواني الاعزاء السلام عليكم لن اقول افتقدتكم فهذا اقل مما اشعر به ولكن مشاغل الدنيا اعاننا الله عليها وكذا الاثار النفسية التي مرت علينا بمصر في السنوات القليلة الماضية وقد افتقدت اخوة كنا علي اتصال دائم معا وتم انقطاع الاتصال بضياع الهاتف وعليه ارقامهم وهم يعرفون انفسهم فليساعدوني علي عودة الاتصال واتمني الا يحرمني الله منكم جميعا. فانا اشتاق للتعلم منكم والتحاور معكم يا كل اعضاء ومشرفي واداري المتتدي الاعزاء فدعواتكم لنا بعودة نشاطنا بالشكل الذي نستطيعه وفقنا الله
    6 points
  2. استاذى الحبيب عادل حنفى لم أتشرف بالتعرف على حضرتك لانى التحقت بجامعه اوفيسنا متأخرا ولكن عرفتك من أعمالك الرائعه وكنوزك بالمنتدى كم انا سعيد بعودتك عوده حميده بأذن الله ونسأل الله تعالى ان يغفر لفقيدنا واستاذنا / عماد الحسامى أسال الله تعالى ان ينير قبره كما نور المنتدى باعماله والسؤال واجب على كل اعضاء واساتذة جامعه اوفيسنا وجب علينا السؤال عنهم ارجوا من يعرف ارقامهم يبلغهم سلامنا وانهم وحشونا جدا نتمنى من الله ان يكون سبب انقطاعهم خيرا ان شاء الله فالمنتدى افتقد الكثير والكثير من رجال واناث لا يخشون الا الله قلوبهم ملئيه بحب الخير ونشر العلم الاستاذ القدير / عبدالله باقشير خبور خير المنتدى والاستاذ القدير / محمد يحياوى نسر المنتدى والاستاذه القديره / ام عبدالله حورية المنتدى والاستاذ القدير /جمال اسماعيل ملك المعادلات والاستاذ القدير /رجب جاويش فارس المنتدى والاستاذ القدير / طارق محمود مهندس المنتدى والاستاذ القدير / ابن مصر المهندس احمد مايستر المنتدى والاستاذ القدير / محمود الشريف امير المنتدى وغيرهم من الافاضل الذين اثرو بالمنتدى باعمالهم واخلاقهم الكريمه اسال الله تعالى ان يكونو جميعا بخير وان يكونو بيننا فى القريب العاجل بالمنتدى تقبلوا تحياتى ولكل عضو ورده
    6 points
  3. راجع المشاركة ستجدني قلت ضع موشر الماوس في آخر سطر ألا وهو End Sub تقبلوا تحياتي وكل عام وأنتم بخير وأراكم إن شاء الله بعد أجازة العيد في رعاية الله
    3 points
  4. السلام عليكم: جزاكم الله خيراً أساتذتنا الكرام قال الله تعالى :" وفوق كل ذي علمٍ عليمٌ "...فالعلم بحر مداه واسع وغوره عميق وشاطئه طويل ...ونحن كمن يرسو على ضفة ..أمام علم الله الواسع ليس العيب أن نقع في الخطأ بل العيب الاستمرار فيه أشكر للأستاذ الكريم ياسر متابعته وتدقيقه وتصحيحه،كما أشكر للأستاذ إبراهيم مسارعته لتعديل النقاط التي وقع فيها لبس . وبذلك ينال الدارسون أمثالي حصتهم من العلم دون أي إشكال تقبلوا تحياتنا العطرة.
    3 points
  5. أخي الحبيب إبراهيم وجب تصحيح نقط معينة وهو أنه لا يجوز الإعلان عن متغير وتعيين قيمة له في نفس السطر Dim H As Integer=10 يجوز ذلك في لغة الفيجوال بيزيك دوت نت أما في VBA سيعطيك خطأ نقطة أخرى بالنسبة للسطر Dim H,m As Integer هنا لم يتم الإعلان عن المتغيرين من النوع عدد ..فقط المتغير m هو المتغير العددي أما المتغير H في هذه الحالة يعتبر من النوع Variant للتأكد من صحة مقولي قم بنسخ الكود التالي في موديول Sub Test() Dim H, m As Integer End Sub قم بوضع مؤشر الماوس في سطر End Sub اضغط F9 لوضع نقطة وقوف BreakPoint سيكون لونها باللون الأحمر الغامق روح لقايمة View وأظهر نافذة Locals ثم قم بتنفيذ الكود ستجد في النافذة تفاصيل كل متغير أرجو أن أكون قد وفقت في توصيل المعلومة
    3 points
  6. السلام عليكم ورحمة الله وبركاته أتشرف بمن تشرف به إخوتي الكرام...لم أكن أعرفه من قبل ...والتعارف من السنّة ... أستاذنا الجليل عادل حنفي المحترم لقد أثنى عليكم إخواننا الكرام خيراً...نسعد بوجودك ...ونرجو الله تعالى أن يمد هذا المنتدى بكل من يرجى خيره ...ويطلب علمه...فائق احترامنا وتقديرنا...أخ عزيز كريم بين إخوته.. من غرائب وعجائب الزمن أن يقوم ضيف جديد بصاحب البيت...حللت أهلاً ونزلت سهلاً...والسلام عليكم...أخوكم أبو يوسف.
    3 points
  7. اضف الكود التالي الى الزر الموجود في شيت البحث Worksheets("الاكواد").Rows(1).Find(Range("E2")).EntireColumn.Find(Range("A2")).Resize(, 2).Interior.Color = vbRed
    3 points
  8. لا يا أستاذ محمد لا مثل ولا دارجة وإنما هى أهازيج من وحى الخيال بتحصل كل شوية بينى وبين أخونا ياسر خليل القائل ... ارسى في المينا لأبعتك على مارينا !! تحياتى
    3 points
  9. السلام عليكم الاستاذ (( صقر )) فعلاً لقد قلت ما يجول في خاطري ....تعرفنا عليهم من خلال اعمالهم .. بارك الله لهم ... وعوداً حميداً استاذ عادل حنفي
    3 points
  10. الكود بالليبل و بحدث ال TextBox Exit لن يحقق المطلوب لأن حدث ال Exit لا يقع عند دخول اللييبل الكود التالي أسهل و أقصر و يشتغل بغض النظر عن عدد ال textboxes Private Sub Label1_Click() If TypeName(ActiveControl) = "TextBox" Then If Len(ActiveControl) = 0 Then ActiveControl = Date Else MsgBox "Date already entered in TextBox : '" & ActiveControl.Name & "'" End If Else MsgBox "You need to select a TextBox first" End If End Sub
    3 points
  11. وهذه اضافة أيضا قد تفيد بأن اسم الزر فى اليوز فورم يتغير مع تغير العملية الحسابية Private Sub CommandButton1_Click() If Me.CommandButton1.Caption = "جمع " Then Me.CommandButton1.Caption = "ضرب " Me.CommandButton1.BackColor = RGB(0, 255, 0) TextBox4 = Val(TextBox2) + Val(TextBox3) Else Me.CommandButton1.Caption = "جمع " Me.CommandButton1.BackColor = RGB(255, 0, 0) TextBox4 = Val(TextBox2) * Val(TextBox3) End If End Sub مهمتين لزر واحد .rar
    2 points
  12. اخى واستاذى ياسر بالفعل كما قلت انه من الخطأ التعبير فى لغة vba عن المتغير واعطاءه قيمة فى نفس السطر ............................................................ اما بخصوص الإعلان عن المتغيرين من النوع عدد ..فقط المتغير m هو المتغير العددي أما المتغير H في هذه الحالة يعتبر من النوع Variant فقد حاولت التطبيق ولكنى فشلت فحينما وضع مؤشر الماوس فى سطر الكود وعند الضغط على f9 ظهرت لى هذه الرساله على العموم انا اسعدنى جدا متابعتك للموضوع علشان لو فيه توضيح او اخطاء تلحقنا فيها منتحرمش منك ياريس تقبل تحياتى
    2 points
  13. أخي الكريم جرب الملف التالي فيه حلين لإخفاء الصفر .. Hide Zero Values.rar
    2 points
  14. السلام عليكم و رحمة الله و بركاته أستاذنا الغالي محمد حسن المحمد .. أنت محق في كل ما قلته .. أما أيقونة تحديد أفضل إجابة سنخترع واحدة .. تفضّل .. كلامك دومًا الأفضل :
    2 points
  15. أشكرك أخى و أستاذى الفاضل ياسر وأستاذى العزيز محمد حسن أستاذى ياسر تقدر تقول الدنيا وأشغالها بتطغى أحيانا علينا لكن نعطس نغطس ونرجع نقب مطرح ما نحب
    2 points
  16. السلام عليكم ورحمة الله وبركاته كان يا ما كان....هذه واحدة من بين كثير ...ظهرت في بداية النسخة الجديدة ثم اختفت. كان بالملف الشخصي قائمة أصدقاء وطلب صداقة ....من ناحيتي لن أبلّغ.. لاحظ أنهم وضعوا الإعلان المثبت عن عدم الاستعجال بعد كتابتي للمقترحات وطالبوني بالالتزام بها ولا أدري إن كنت سأنتظر إلى يوم القيامة ولذلك قررت ألا أرفع مقترحاً وإن كان محقّاً. كان يا ما كان.... تقبل تحياتي. والسلام عليكم.
    2 points
  17. أستاذ عادل والله انت وحشنا واشتقنا لمساعداتك واعمالك واكوادك الجميله وفقك الله
    2 points
  18. السلام عليكم ورحمة الله وبركاته الدرس الخامس 5-Colors الالوان وسوف نتناول فى هذه الدرس الاتى استخدام الخاصيه color استخدام الخاصيه ColorIndex استخدام الخاصيه Interior.Color استخدام الخاصيه borders.color استخدام الخاصيه Tab.Color ............................................................. استخدام الخاصيه color تستخدم الخاصيه COLOR فى تلوين الخطوط FONT يجب ان نشير الى اننا حينما نتعامل مع color فاننا نستخدم الخاصيه الخاصه بالالوان RGB سنجد ان قيمة RGB مكونه من ثلاث معطيات هى الاحمر -- الاخضر --الازرق .RGB(red_value, green_value, blue_value) وسوف نقدم بعض القيم والالوان الخاصه ب RGB الان نتعرف على كيفية استخدام هذه الخاصيه فى تلوين الخط نفترض اننا لدينا الاسم HIMA فى الخليه A17 ونريد تلوين الخط باللون الازرق سيكون شكل الكود كالاتى Sub colorfont() Range("a17").Font.Color = RGB(0, 0, 255) ' blue End Sub وطبعا لو عايز تغير اللون لاى لون انت عايزه كل الى عليك ان هتغير الارقام الخاصه بالخاصيه RGB استخدام الخاصيه ColorIndex تستخدم ايضا فى التعامل مع تلوين الخطوط ولكن يتم الاشاره هنا الى الالوان بالارقام العدديه من 1 الى 56 راجع الصوره فمثلا لو لدينا الاسم HIMA فى الخليه A21 ونريد تلوينه باللون الاحمر سيكون شكل الكود كالاتى Sub ColorIndexfont() Range("A25").Font.ColorIndex = 3 'red End Sub استخدام الخاصيه borders.color تستخدم هذه الخاصيه فى تلوين حدود الخلايا وطبعا احنا عرفنا قبل كده ازاى نتعامل مع COLOR عن طريق RGB نفترض اننا عايزن نحدد الحليه B33:D33 باللون الازرق سيكون شكل الكود كالاتى Sub coloredborders() Range("b33:d33").Borders.Color = RGB(0, 0, 255) ' blue End Sub استخدام الخاصيه Interior.Color تستخدم هذه الخاصيه فى تلوين الخلايا وطبعا احنا عرفنا قبل كده ازاى نتعامل مع COLOR عن طريق RGB نفترض اننا عايزين نلون الخلايا من B41:D41 باللون الاخضر سيكون شكل الكود كالاتى Sub backgroundcolor() Range("b41:d41").Interior.Color = RGB(0, 255, 0) ' green End Sub استخدام الخاصيه Tab.Color تستخدم هذه الخاصيه فى التعامل مع تبويب الشيتات Sub colorwsheettab() Sheets("5-Colors").Tab.Color = RGB(0, 0, 255) ' blue End Sub فلو احنا عايزين نلون تبويب الشيت المسمى ب 5-Colors باللون الازرق مثلا هيكون شكل الكود كالاتى Sub colorwsheettab() Sheets("5-Colors").Tab.Color = RGB(0, 0, 255) ' blue End Sub اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى learnvba.rar
    2 points
  19. السلام عليكم ورحمة الله وبركاته بعد اذن الأستاذ أسامه وباقى الأساتذة الأخ KHMB هذا كود لتلوين مدى معين بعد تمام اكتمال بياناته اعتمادا على عدد الخلايا الفارغة فيه Private Sub Worksheet_Change(ByVal Target As Range) Dim LR As Integer, Rownum As Integer, CountBlank As String LR = Cells(Rows.Count, 1).End(xlUp).Row For Rownum = 2 To LR CountBlank = Application.WorksheetFunction.CountBlank(Range(Cells(Rownum, "A"), Cells(Rownum, "H"))) If CountBlank = 0 Then Range(Cells(Rownum, "A"), Cells(Rownum, "H")).Interior.ColorIndex = 38 Next Rownum End Sub الكود يوضع فى حدث الورقة التلوين يعمل من الصف الثانى على الأعمدة من A الى H جرب المرفق التالى Color a row after entering the required information .rar
    2 points
  20. السلام عليكم ورحمة الله وبركاته الدرس الثالث 3-selection عمل تحديد للخلايا وسوف نتناول فى هذه الدرس الاتى كيفيةالدخول الى محرر الاكواد كيفية تسمية الماكرو تحديد خليه واحده تحديد اكثر من خليه تحديد نطاق من الخلايا تحديد نطاق من الخلاياالتى تم اعطائها اسم تحديد خليه بواسطه السطر والعمود تحديد خليه تقع ضمن نطاق الخلايا تحديد خليه بواسطة التحرك تحديد الاسطر تحديد الاعمده تحديد اخر خليه تحديد الخلايا التى بها بيانات نسخ البيانات المحدده ........................................... كيفية الدخول الى محرر الاكواد وذلك من اجل اضافة كود معين اتبع الصوره 1 ستفتح لك نافذه بيضاء فارغه كما فى الصوره رقم 2 كيفية تسمية الماكرو لابد ان يبدأ اسم الماكرو ب Sub وينتهى ب end sub نقوم باعطاء الماكرو اسم معين وليكن selection بالتالى ستجد ان الماكرو المنشأ يكون بهذا الشكل كما يتضح من الصوره تحديد خليه واحده نفترض اننا نريد تحديد الخليه A23 سيكون شكل الكود كالاتى Sub selection_a23() 'تحديد الخليه A23 Range("A23").Select End Sub تحديد اكثر من خليه نفترض اننا نريد تحديد الخليهa25 وb25 سيكون شكل الكود كالاتى Sub selection_a25_b25() 'تحديد الخليه a25,b25 Range("A25,B25").Select End Sub تحديد نطاق من الخلايا نفترض اننا نريد تحديد تحديد الخلايا من a27 الى g28 سيكون شكل الكود كالاتى Sub selection_a27tog28() 'تحديد نطاق من الخلايا Range("A27:g28").Select End Sub تحديد نطاق من الخلاياالتى تم اعطائها اسم نفترض اننا نريد تحديد الخلايا من a29:g30 سوف نقوم بعمل ذلك من خلال تسمية النطاقات اتبع الصوره سيكون شكل الكود كالاتى Sub select_a29tog30() ' تحديد نطاق من الخلاياالتى تم اعطائها اسم ' من a29 الى g41 Range("select_a29tog30").Select End Sub تحديد خليه بواسطه السطر والعمود نفترض اننا نريد تحديد الخليه الواقعه بين السطر 44 والعمود 4 اى d44 وسيكون شكل الكود كالاتى Sub selection_cells_r_c() ' تحديد الخليه الواقعه بين السطر 44 والعمود 4 اى d44 Cells(44, 4).Select End Sub ملحوظه بما اننا لم نتطرق الى التعرف على cells فنعدى عليها نتعرف عليها ببساطه cells زيها زى range الفرق بينها وبين range انها تستخدم للاشاره الى خليه واحده فقط ويكون شكلها الافتراضى كالاتى Cells(row, Columns).Select تحديد خليه تقع ضمن نطاق من الخلايا هنا نفترض اننا لدينا نطاق مكون من مجموعه من الخلايا من a47:g47 ونريد عند كل مره يتم الظغط على الزر يتم تحديد خليه مختلفه من خلايا النطاق سيكون شكل الكود كالاتى Sub selection_rnd() 'تحديد نطاق من الخلايا التى تقع فى النطاق من a47 الى a57 'Cells(Int(Rnd * 10) + 47, 1).Select ' تحديد خليه تقع ضمن نطاق الخلايا من a47 الى g47 Cells(47, Int(Rnd * 7) + 1).Select End Sub لاحظ ان عدد الاعمده 10 اعمده هى من a الى g تحديد خليه بواسطة التحرك نفترض اننا نريد تحديد الخليه التى تلى الخليه a51 بمقدار سطرين وفى نفس العمود سوف نستخدم هنا offset سيكون شكل الكود كالاتى Sub selection_move() ' تحديد الخليه التى تلى الخليه a51 بمقدار سطرين وفى نفس العمود Cells(51, 1).Offset(2, 1).Select End Sub ملاحظه بما اننا لم نتطرق الى offset فنتعرف سريعا على كيفيه استخدامها offset هى عباره عن التحرك لاتجاه معين الشكل الافتراضى ل offset Offset(row,columns) فلو كتب هكذا Offset(1,2) فهذا يعنى اننا سوف ننتقل الى الخلية فى السطر التالى وفى العمود الذى يليها بعمودين وهكذا فمثلا فى مثالنا هنا Cells(51, 1).Offset(2, 1).Select فلو حزفنا offset واصبح الكود بهذا الشكل Cells(51, 1).Select فهذا يعنى اننا سوف نقوم بتحديد الخليه a51 ثم حينما نضيف offset ليصبح الكود بهذا الشكل Cells(51, 1).Offset(2, 1).Select فهذا يعنى اننا سوف نقوم بتحديد الخليه a51 ثم نتحرك بمقدار سطرين لاسفل اى اننا اصبحنا الان فى السطر 53 ثم التحرك بمقدار عمود واحد لنصبح فى العمود الثانى وبما اننا اصبحنا فى السطر 53 والعمود 2 سنجد ان الخليه التى تقع فيهما هى الخليه b53 تحديد الاسطر نفترض اننا نريد تحديد الاسطر من 53 الى 54 سيكون شكل الكود كالاتى Sub selection_row() ' تحديد الاسطر من 53 الى 54 Rows("53:54").Select End Sub تحديد الاعمده نفترض اننا نريد تحديد الاعمده من العمود a الى العمودG سيكون شكل الكود كالاتى Sub selection_COL() ' تحديد الاعمده Columns("A:G").Select End Sub تحديد اخر خليه نفترض اننا لدينا مجموعه من الخلايا فى السطر الاول مملوؤه بالبيانات وان اول خليه بها بيانات هى الخليه a58 ونريد الوصول الى اخر خليه بها بيانات بعد الخليه a58 سيكون شكل الكود كالاتى Sub SELECTLASTCELLS() ' تحديد اخر خليه بها بيانات Range("A58").End(xlDown).Select End Sub تحديد الخلايا التى بها بيانات بداية من خليه معينه نفترض اننا نريد تحديد الخلايا التى بها بيانات بداية من الخليه a62 سيكون شكل الكود كالاتى Sub SELECTCELLSDATA() ' تحديد الخلايا التى بها بيانات بداية من Range("A62", Range("A62").End(xlDown)).Select End Sub اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى
    2 points
  21. تفحص المرفق اخي الكريم rating10.rar
    1 point
  22. وعليكم السلام ورحمة الله وبركاته بالمرفق تطبيق لنفس الفكرة عبر ثلاث دوال يمكنك الاطلاع و تطبيقه على مشروعك. تحياتي ثلاث دوال هامة.rar
    1 point
  23. 1 point
  24. أخي الكريم عبد الناصر محمود راجع رد الأخ الصقر في المشاركة رقم 2 وراجع توجيهات المنتدى في الموضوعات المثبتة في صدر المنتدى .. وأعتقذ ساعتها ستعرف لما لا يوجد استجابة لموضوعك من هنا راجع خصوصاً التوجيه الثالث عشر تقبل تحياتي
    1 point
  25. شكرا لكم السادة الافاضل ردكم الكريم . وايضاً شكراً لك أستاذنا ياسر خليل فردك دائماً فيه الجواب الشافى وهذا ما كنت أنتظره .
    1 point
  26. السلام عليكم ورحمة الله اخي أبو يحى بارك الله فيك, الصفر من ضمن شروط المعادلة IF(C4>D4;C4;0)= الشرط يقول في حالة False ان تضع صفـــــر وهنا لديك إختيارات كثيره اما صفر او فراغ بتبديل الصفر بعلامتي تنصيص او أي نص تريده بوضعه بين علامتي التنصيص او حسب ما أشتار إليك الأستاذ مختار ليس أمامك الا Numeric format الذى فى كود الأستاذ جعفر جزاهم الله عنا خير الجزاء
    1 point
  27. أخي الحبيب جعفر رغم أن الفكرة معقدة كما ذكرت إلا أنني على استعداد أن أصبر شهوراً طوال للوصول إليها كونها فكرة جديدة وممتازة وتفيد في أغراض أخرى وأنا بإذن الله أثق في الله ثم في قدراتك في الوصول لمثل هذا الحل العبقري تقبل وافر تقديري واحترامي
    1 point
  28. اخى واستاذى جعفر سؤال بسيط كيف سيكون شكل الكود فى حالة وضع التيكست بوكس داخل فريم تقبل تحياتى
    1 point
  29. السلام عليكم ورحمة الله وبركاته أخي وأستاذي جعفر الطريبق بارك الله فيك وجزاكم الله كل خير هذا هو المطلوب بكل معنى الكلمة النتيجة صحيحة مئة بالمئة ومثل ماقلت أصبحت سريعة في الاداء باركم الله فيكم جميعاً اخواني الموضوع أصبح مجاب وكامل تقبل تحياتي ومروري
    1 point
  30. السلام عليكم ورحمة الله وبركاته وبعد: الشكر الجزيل لأخينا الصقر على الطرح المميز وأسأل الله العظيم التوفيق ومواصلة الصيد فالبحر زخم والحيتان لذيذة . عندي ملاحظة بسيطة بخصوص خاصتي lock و enabled فمع تشابهمها في منع المستخدم من الادخال إلا أنهما تختلفان في التنسيق ، حيث يظهر المؤشر في textbox ذو الخاصية llocked=true على العكس لا يظهر في textbox ذو الخاصية enabled=false هذا من جهة ومن جهة أخرى فإن خاصية enabled=false تجعل الخلفية backcolor باهتة وغير ظاهرة على حقيقتها وتجعل النص المفترض من المبرمج text باهتا أيضا (عند تنفيذ الكود طبعا) بينما تظهر بشكل واضح لدى textbox بخاصية locked=true كما يتضح النص المبرمج فيه جيدا. والخلاصة أن خاصية lock تشعر المستخدم أن بإمكانه الوصول إلى التحرير لو استوفى مجموعة من الشروط التي حددها المبرمج (حساب يسمح وآخر لا يسمح مثلا)، بينما خاصية enable=false تجعل عنصر التحكم للقراءة فقط ومصدر لمعلومات أساسية أو مكملة لا يكون المستخدم عموما في حاجة إلى تغييره مع إمكانية فسح المجال للتحرير من طرف المبرمج. هذا والله أعلى وأعلم . في المرفق مثال على ذلك. enableAndLockProperties.rar
    1 point
  31. الاستاذ الحبيب ابويوسف جزاكم الله خيرا كان فى بالمنتدى الاول ايقونه تحديد افضل اجابه هل هذه غير موجوده بالنسخه الجديده ؟ لو مش موجود لازم نبلغ بيها الاستاذ محمد طاهر للعمل على أظهارها وجب علينا التنويه له تقبلو تحياتى
    1 point
  32. شكرا على الموضوع
    1 point
  33. السلام عليكم ورحمة الله وبركاته حبيت اضيف رابط فيديو اليوتيوب عن كيفية إنشاء قاعدة بيانات علي الانترنت وربطها بمايكروسوفت إكسيس . فيديو لمدة ساعة وشرح ممتاز جداً وذلك لمن يريد تعلم كيفية الربط بالأنترنت ولكم تحياتي ربط الأكسس sql  بالأنترنت
    1 point
  34. أترى الزر المسمى "تظليل"، الذي له شكل دلو مائل، ضمن القسم "فقرة" في الشريط؟ حدد كامل النص وانقر على السهم إلى اليسار من ذلك الزر واختر "بلا لون".
    1 point
  35. السلام عليكم ورحمة الله شكرا استاذنا ياسر جزاك الله خير الطلب الثاني للاخ اشـرف الفرق بين relative reference مرجع نسبي ذو علاقة أي مقيد. مثال في صيغ المعادلات نعرف مثلا A1 هنا مرجع مقيد أي يتم تنفيذ المعادله فقط علي A1 absolute reference مرجع مطلق لو وضعنا صيغة المعادلة بالشكل هذا $A$2 فإن هذا المرجع يســري علي جميع الخلايا في العمود A مثال لو كنت امين صندوق في مؤسسة واعطاك صاحب المؤسسة او المدير تعليمات خطية موثقة بأنك تصرف أي فاتورة يجيبها لك ياسر خليل فهذه التعليمات مرجع مطلق. اما لو اعطاك تعليمات خطية بأن تصرف لحسام عيسى مبلغ الفاتورة رقم ؟؟؟؟؟ فهذه التعليمات مرجع مقيد برقم هذه الفاتورة فقط.
    1 point
  36. تفضل قبل ما أنام عشان أنام وأنا ضميري مرتاح Sub Archive() 'تعريف المتغيرات Dim WS As Worksheet, SH As Worksheet Dim lRow As Long 'تعيين أوراق العمل المطلوب الترحيل منها وإليها Set WS = Sheet1: Set SH = Sheet2 'تحديد آخر صف فارغ بعد آخر خلية بها بيانات في ورقة العمل المراد الترحيل إليها lRow = SH.Cells(Rows.Count, "Q").End(xlUp).Row + 1 'في الصف الفارغ الأخير في ورقة العمل المراد الترحيل إليها [Q] الخلية في العمود 'تساوي 'الخلية التي تحتوي تاريخ اليوم SH.Cells(lRow, "Q") = WS.Range("L13") 'في الصف الفارغ الأخير في ورقة العمل المراد الترحيل إليها [O] الخلية في العمود 'تساوي 'الخلية التي تحتوي الزيادة أو العجز SH.Cells(lRow, "O") = WS.Range("L12") End Sub
    1 point
  37. التعديل التالي تقوم بتصغير اليوسرفورم الزاوبة العليا اليسرى للشاشة Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Const GWL_STYLE As Long = (-16) Private Const WS_SYSMENU As Long = &H80000 Private Const WS_MINIMIZEBOX As Long = &H20000 Private Const WS_MAXIMIZEBOX As Long = &H10000 Private Const SW_SHOWMAXIMIZED = 3 Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long Private lFormHandle As Long Private Sub UserForm_Activate() Dim lStyle As Long lFormHandle = FindWindow("ThunderDFrame", Me.Caption) lStyle = GetWindowLong(lFormHandle, GWL_STYLE) lStyle = lStyle Or WS_SYSMENU lStyle = lStyle Or WS_MINIMIZEBOX lStyle = lStyle Or WS_MAXIMIZEBOX SetWindowLong lFormHandle, GWL_STYLE, (lStyle) DrawMenuBar lFormHandle End Sub Private Sub CommandButton1_Click() Unload Me End Sub Private Sub UserForm_Resize() If IsIconic(lFormHandle) Then Me.Move 0, 0, 0, 0 End If End Sub
    1 point
  38. السلام عليكم و رحمة الله و بركاته جرّب أخي الغالي أكرم جلال هذا المرفق ربما يكون ما طلبته .. خالص احتراماتي مهمتين 2.rar
    1 point
  39. السلام عليكم ورحمة الله وبركاته بما ان اخوكم ضعيف فى لغة VBA استحملونى عشان هاشرحلكم اليوم طريقة تسريع الكود فى حالة بطء تنفيذ الكود هناك ثلاثة اوامر لتسريع تنفيذ الامر يتم كتابتها قبل الكود ويتم الغاء الاوامر بعد الكود اولا قبل الكود إيقاف وميض الشاشة Application.screenupdating=False إيقاف الحساب التلقائي Application.calculation=xlCalculationManual إيقاف الأحداث التلقائي Application.EnableEvents=False ثانيا بعد الكود نكتب الثلاث اوامر لاسترجاع تنفيذ العمليات اعادة تشغيل وميض الشاشة Application.screenupdating=true اعادة تشغيل الحساب التلقائي Application.calculation=xlCalculationAutomatic اعادة تشغيل الأحداث التلقائي Application.EnableEvents= true ارجوا ان اكون وفقت فى الشرح ولمن يريد الاضافة من عمالقة المنتدى يتقدم
    1 point
  40. أستاذ ياسر اكوادك ممتازة كاخلاقك اخى ربنا يجزيك خيرا على ما تقدمه وفقكم الله
    1 point
  41. افرض عندك قائمة طويلة في احدى أعمدة الاكسيل و تحتوي هده القائمة على 5000 اسم مثلا .. و في مكان أخر هنالك خلية تستعمل لادخال اسم من الأسماء الموجودة بالقائمة .. هدا السيناريو يحتاج في الغالب الى قائمة منسدلة Data Validation List لتفادي الادخال في الخلية أسماء غير موجودة على القائمة ... هدا حل جيد لكنه بطيئ حيث يتطلب من المستخدم البحث بين 5000 اسم بواسطة شريطScrollBar قبل أشهر كتبت هدا الكود الدي يستدعي و يفلتر الأسماء أليا بمجرد بدأ كتابة الأحرف الأولى ... ملف للتحميل : https://app.box.com/s/v6uamjb6tad3ozs6ajw0bnt61292ja7v طريقة العمل : 1- Activate the Input Cell 2 - Press F1 Key to bring up the list 3 - ... Start Typing in and the list will get filtered automatically based on the letters you have typed 4 - Press Enter Key or use the Down /Up Arrow navigation Keys when the searched Item is found or Press the ESC Key to Cancel the whole operation
    1 point
  42. اخى الفاضل مستخدم جديد مشكورا على المتابعه للموضوع وحرصا من على تقديم المساعده بقدر الامكان ومحاولة توصيل المعلومه بقدر الامكان اليك محاوله بسيطه منى لتوضيح OFFSET تقبل تحياتى
    1 point
  43. السلام عليكم ورحمة الله وبركاته جزاك الله خيراً أخي مختار المحترم على هذا الكود المتميز. تقبل تحياتي
    1 point
  44. تسلم يا أخي الغالي مختار .. مشكور على الكود المتميز بس تعالى هنا قولي (بتغطس كتير مش عارفلك سكة ؟!) ... ارسى في المينا لأبعتك على مارينا !! طبعاً هتقولي ابعتني هناك !!!
    1 point
  45. أستاذ ياسر خليل اسال الله ان يمن عليك بالصحة والعافيه وان يبارك لك في اولادك وفقك الله في كل حياتك الدنيويه مواضيعك كلها ممتازه
    1 point
  46. الأخ الكريم طارق عواد أهلا بك في المنتدى يرجى تغيير اسم الظهور للغة العربية كما يرجى الاطلاع على رابط التوجيهات راجع الفيديو الثاني مرة أخرى (إذا لم يكن للأمر بد فاطرح موضوع جديد أو قم بالبحث في المنتدى أولاً لعلك تجد طلب مشابه لطلبك)
    1 point
  47. السلام عليكم المصفوفات الجداول تعريف مبسط : التعامل مع اكثر من قيمة واحدة تطبيقات عملية الدرس الاول : المصفوفات Arrays rArr = Array("A", "B", "C") اذا اردنا ان نضع الصفيف هذا على صف واحد وثلائة اعمدة Sub kh_1() Dim rArr rArr = Array("A", "B", "C") Range("A1").Resize(1, 3).Value = rArr End Sub اذا اردنا ان نضع الصفيف هذا على ثلاثة صفوف وعمود واحد تعرفون الدالة TRANSPOSE إرجاع نطاق خلايا عمودى كنطاق أفقي، أو بالعكس. يجب إدخال TRANSPOSE كصيغة صفيف في نطاق به نفس عدد الصفوف والأعمدة، على الترتيب، مثل صفيف الأعمدة والصفوف الخاصة به. استخدم TRANSPOSE لتبديل الاتجاه العمودي والأفقي لصفيف في ورقة عمل. بناء الجملة TRANSPOSE(array) Array (الصفيف) هو الصفيف أو نطاق الخلايا في ورقة العمل التي ترغب في تحويلها. يتم إنشاء تحويل الصفيف باستخدام الصف الأول للصفيف على أنه العمود الأول للصفيف الجديد، والصف الثاني للصفيف على أنه العمود الثاني للصفيف الجديد، وهكذا. ============================================================ Sub kh_2() Dim rArr rArr = Array("A", "B", "C") rArr = WorksheetFunction.Transpose(rArr) Range("A1").Resize(3, 1).Value = rArr End Sub يتبع لمتابعة الموضوع افضل ان تضعوا هذه الاكواد في ملف الان نقوم باضافة فورم ونضيف التالي ListBox1 CommandButton1 CommandButton2 اضف هذه الاكواد للفورم Private Sub CommandButton1_Click() Dim rArr rArr = Array("A", "B", "C") Me.ListBox1.List = rArr End Sub Private Sub CommandButton2_Click() Dim rArr rArr = Array("A", "B", "C") Me.ListBox1.Column = rArr End Sub Private Sub UserForm_Initialize() Me.ListBox1.ColumnCount = 3 End Sub بعد فتح الفورم اضغط على الازرار CommandButton1 CommandButton2 ما هي النتيجة يتبع ============================================================= المصفوفة Array("A", "B", "C") من النوع Variant وذو البعد الواحد واول دليل لعناصرها LBound صفر وآخر دليل لعناصرها UBound عدد عناصرها ناقص واحد ونضيف عناصرها دفعة واحدة ============================================================= بعض الدالات للسلاسل النصية تعطي نتائج صفيف مثل SPLIT FILTER ناخذ مثال عن SPLIT Sub kh_Split() Dim MyAr MyAr = Split("عبدالله علي احمد باقشير") Range("A1").Resize(1, UBound(MyAr) + 1).Value = MyAr End Sub =========================================================== =========================================================== =========================================================== الدرس الثاني : الجداول المفهرسة عبارة عن متغيرات مفهرسة Indexed Variables تحتوي على بيانات عديدة من نفس النوع Data Type . كل مصفوفة لها اسم واحد يمكن استخدامه للرجوع إلى أي عنصر فيها وذلك باقتران هذا الاسم بدليل يمثل مكان العنصر فيها ، ويمكن انشاء مصفوفة لإحتواء أي نوع من أنواع البيانات مثل : النصوص والأعداد الحقيقية و الصحيحة وغيرها ، فأنواع البيانات المتوفرة في الفيجيوال بيسك هي : Data Type in VB: {Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, String, Variant, User-defined }. واستخدام المصفوفات في البرمجة يساعد في صناعة أكواد قصيرة وبسيطة ذات قوة كبيرة لأنه يمكن بناء Loops تتعامل بكفاءة مع المصفوفات مهما كان عدد عناصرها وذلك باستخدام دليل العنصر Index Number . ================================================= الخصائص الأساسية للمصفوفة في الفيجيوال بيسك : اسم المصفوفة يمثل عنوان Address في الذاكرة ؛ ولا يمكن تغييره أثناء تنفيذ البرنامج . يمكن الإعلان عن مصفوفة لأي نوع من أنواع البيانات بما في ذلك الأنواع المعرفة من قبل المستخدم User-defined type والـ Object Variables . كل وحدة بيانات منفردة في المصفوفة تسمى عنصر Element . جميع العناصر تكون من نفس النوع إلا في حالة الإعلان عن المصفوفة كـ Variant Data Type . جميع العناصر تكون مخزنة على التتابع في ذاكرة الحاسوب ودليل أول عنصر هو الصفر كـ Default ويمكن جعله 1 باستخدام جملة في بداية الوحدة النمطية Option Base 1 لكل مصفوفة حداً أعلى Upper bound ، وحداً أدنى Lower bound ؛ وعناصر المصفوفة تكون محصورة بين هذين الحدين . من الممكن أن تكون المصفوفة ذات بعد واحد أو متعددة الأبعاد . تحديد الحدين الأعلى والأدنى للمصفوفة Upper bound & Lower bound: عند الإعلان عن مصفوفة، يكتب الحد الأعلى بعد الاسم وبين الأقواس. لا يمكن أن يزيد الحد الأعلى عن نطاق نوع المتغير Long Data Type. الحد الأدنى الإفتراضي Default هو الصفر. اذا عرفت عن هذا المتحول بـــــ Limiteinf To LimiteSup في مكان الوسيط Indexs تكون قد عرفت جدولا بعدد عناصر محدد وبارقام دليل محددة وهذه الطريقة افضل للاستخدام للفهم السريع للوسيط Indexs Dim ay(1 To 3, 1 To 2) As String ----------------------------------------------------------------------------- ay(1 To 3, 1 To 2) لمعرفة الدليل الاول والاخير لليعد الملون بالاحمر للمتحول LBound(ay, 1) UBound(ay, 1) لمعرفة الدليل الاول والاخير للبعد الملون بالازرق للمتحول LBound(ay, 2) UBound(ay, 2) ================================================================== ================================================================== ملحوظة عند إضافة أبعاد المصفوفة فإن مساحة التخزين المطلوبة سوف تزيد زيادة كبيرة ولذلك ينبغي الاحتراس وتفادي استخدام النوع Variant قدر الإمكان لما يتطلبه من مساحة تخزينية كبيرة! ================================================================== ================================================================== المصفوفة ذات الحجم الثابت نعلن عنها بأحد أوامر الإعلان (Public or Private or Dim or Static) مع تحديد عدد العناصر في الأقواس Dim ay(1 To 3, 1 To 2) As String مثال 1: Sub kh_Array1() Dim ay(1 To 3, 1 To 2) As String ay(1, 1) = "A" ay(2, 1) = "B" ay(3, 1) = "C" ay(1, 2) = "D" ay(2, 2) = "E" ay(3, 2) = "F" Range("A1").Resize(3, 2).Value = ay End Sub مثال 2 جدول ضرب Sub KH_5() Dim sArr(1 To 12, 1 To 10) As Integer Dim ContRow As Integer, ContColmn As Integer Dim c As Integer, r As Integer ContRow = UBound(sArr, 1) ContColmn = UBound(sArr, 2) For r = 1 To ContRow For c = 1 To ContColmn sArr(r, c) = r * c Next Next Range("A1").Resize(ContRow, ContColmn).Value = sArr End Sub المصفوفات متغيرة الحجم Dynamic Array: في بعض الأحيان، لا نعرف مسبقاً حجم المصفوفة التي سنستخدمها في البرنامج بالضبط، وقد نريد تغيير حجم المصفوفة أثناء تشغيل البرنامج، هنا سنحتاج إلى المصفوفات ذات الحجم المتغير Dynamic حيث يمكننا تغيير حجمها في أي وقت. تعتبر المصفوفات متغيرة الحجم أحد مميزات الفيجيوال بيسك، وهي تساعد في تنظيم الذاكرة بكفاءة. فمثلاً، يمكن استخدام مصفوفة كبيرة لوقت قصير ثم إعادة تحجيمها لتحرير مساحة من الذاكرة عندما لا نحتاجها. وهذا من شأنه تسريع المعالجة. ولصناعة Dynamic Array نتبع التالي: نعلن عنها بأحد أوامر الإعلان (Public or Private or Dim or Static) ونجعلها ديناميكية بعدم كتابة أي رقم في الأقواس كما يوضح المثال التالي: Dim sArr() As String نعيد الإعلان عنها مع تحديد عدد العناصر باستخدام جملة ReDim كما في المثال التالي: ReDim sArr(1 To ContRow, 1 To ContColmn) ================================================================== ================================================================== ملاحظات هامة . كل جملة من جمل ReDim يمكنها تغيير عدد العناصر بالإضافة إلى الحد الأعلى والحد الأدنى لكل بعد للمصفوفة، ومع ذلك فإن عدد الأبعاد في المصفوفة لا يمكن تغييره. . تمحى جميع القيم المخزنة في المصفوفة كل مرة يعاد فيها تنفيذ جملة ReDim. ويجعل الفيجيوال بيسك القيم كالتالي: في حالة الــــ Variant Array --------- الى ----- Empty Value في حالة الــــ Numeric Array ------- الى ----- Zero في حالة الــــ String Array ----------- الى ----- Zero-Length String في حالة الــــ Array of objects ------ الى ----- Nothing وهذا مفيد عندما نريد تجهيز المصفوفة لبيانات جديدة أو عندما نريد اختزال حجم المصفوفة لتأخذ أقل مساحة ممكنة في الذاكرة. ================================================================== ================================================================== مثال 1: Sub KH_6() Dim sArr() As String Dim iName As String Dim ContRow As Integer, ContColmn As Integer Dim c As Integer, r As Integer, i As Integer Range("H7").Resize(14, 5).ClearContents iName = CStr([H4]) ContColmn = 5 With Range("B7").Resize(14, 1) ContRow = WorksheetFunction.CountIf(.Cells, iName) ReDim sArr(1 To ContRow, 1 To ContColmn) For r = 1 To .Rows.Count If CStr(.Cells(r, 1)) = iName Then i = i + 1 For c = 1 To ContColmn sArr(i, c) = CStr(.Cells(r, c)) Next End If Next End With Range("H7").Resize(ContRow, ContColmn).Value = sArr Erase sArr End Sub دروس المصفوفة 1.rar ================================================================== ================================================================== Erase تستخدم لتحرير الذاكرة المعينة للجداول الديناميكية واعادة تعيين عناصر الجدول الى قيمتها البدائية بطول ثابت مثال: Erase sArr ================================================================== ================================================================== تغيير حجم المصفوفة دون فقد بياناتها يمكننا فعل ذلك باستخدام جملة ReDim مع كلمة Preserve وتعني الحفظ الجملة التالية تغير حجم المصفوفة ولكنها لا تمحو العناصر الموجودة بها: ReDim Preserve MyArray( 10 ) والآن يمكننا كتابة ملخص متكامل لجملة ReDim. جملة ReDim: تستخدم في مستوى الـProcedure لإعادة تخصيص allocates مساحة تخزينية storage space لمصفوفة متغيرة الحجم Dynamic array. صيغتها Syntax: ReDim [Preserve] varname(subscripts) [As type] [, varname (subscripts) [As type]] ================================================================== ================================================================== ملاحظات هامة: جميع ما ذكر في الصيغة داخل قوسين مربعين [] يعتبر اختياري يمكن الاستغناء عنه حين عدم الحاجة إليه. تستخدم جملة ReDim لتحجيم أو إعادة تحجيم مصفوفة متغيرة الحجم Dynamic Array والتي بالفعل قد أعلن عنها مسبقاً باستخدام أي من الجمل Dim, Private, Public مع أقواس فارغة (أي بدون ذكر الأبعاد). يمكن تكرار استخدام جملة ReDim لتغيير عدد العناصر والأبعاد لمصفوفة، ومع ذلك لا يمكن الإعلان عن مصفوفة بنوع معين من البيانات ثم إعادة تعريفها لاحقاً مع تغيير نوع البيان لنوع آخر إلا إذا كانت المصفوفة محتواه في variant. إذا كانت المصفوفة محتواه في variant فإن نوع بيان العناصر يمكن أن يتغير باستخدام المقطع As Type إلا إذا استخدمنا كلمة Preserve ففي هذه الحالة لا يسمح بتغييرات. إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق. إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة. وإذا كان للمصفوفة بعدين أو أكثر فيمكن فقط تغيير حجم البعد الأخير مع الاحتفاظ بمحتويات المصفوفة. عندما نستخدم Preserve يمكن تغيير حجم المصفوفة بتغيير الحد الأعلى بينما ينتج لدينا خطأ حين تغيير الحد الأدنى. إذا صنعنا مصفوفة أصغر مما كانت فإن بيانات العناصر المخزنة سوف تفقد. تحذير: جملة ReDim ستعمل وكأنها جملة إعلان إذا كان المتغير (المصفوفة) التي تعلن عنه غير موجود على مستوى الـProcedure أو الـModule. وإذا كان هناك متغير آخر بنفس الاسم قد أنشئ بعد ذلك وحتى لو كان في النطاق ككل Scope؛ فإن ReDim سوف ترجع للمتغير الأخير ولن يتسبب عن ذلك خطأ في الترجمة Compilation error حتى ولو كانت جملة Option Explicit فعّالة. وبذلك لن يدرك المبرمج أنه هناك خطأ بالشيفرة code. ولتفادي هذا التعارض لا ينبغي استخدام جملة ReDim كجملة إعلان بدلاً من Dim مثلاً، ولكن نستخدمها فقط لإعادة تعريف حجم المصفوفة. ================================================================== ================================================================== توضيح اكثر لهذه الملاحظة إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق. امثلة : للبعد الاخير ( الملون بالاحمر) هنا ثلاثة ابعاد البعد الاخير هو 15 ReDim Preserve X(10,12,15) ReDim Preserve X(10,12,15) هنا بعدين البعد الاخير هو 12 ReDim Preserve X(10,12) ReDim Preserve X(10,12) هنا بعد واحد إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة ReDim Preserve X(10) ReDim Preserve X(10) حمل الملف الموجود في هذا الموضوع تطبيق عملي لما ذكر اعلاه http://www.officena....showtopic=42346 http://www.officena.net/ib/index.php?showtopic=42584 دروس المصفوفة 1.rar kh_SumProduct.rar دروس المصفوفة ( دالة لتوليد ارقام عشوائية).rar ((الشرح العلمي منقول من هنا وهناك)) تم بحمد الله وشكره
    1 point
  48. السلام عليكم و رحمة الله و بركاته تفضل أخي أتمنى أن يكون هذا هو المطلوب 666666.rar
    1 point
  49. السلام عليكم ورحمة الله وبركاته عند الاستيراد تختار عمود الاسم فقط وهو سياخذ باقي الاعمدة بشكل تلقائي وقمت بتعديل كود نسخ البيانات ليقوم بنسخ البيانات فقط بدون ازرار الماكرو ________.rar
    1 point
  50. بسم الله الرحمن الرحيم عند قيامنا بالترحيل من ورقه الى اخرى نحتاج دائما للتاكد من وجود البيانات فى الخلايا قبل الترحيل و عاده نكرر شرط وجود البيانات مع And أو Or و ندخل فى شروط طويله و يزداد التعقيد عند محاوله الترحيل لأكثر من صفحه 0 الكود التالى تستطيع كتابته مره واحده (Private Function) ثم تقوم باستدعاءه فقط قبل اى عمليه الترحيل Private Function Valid() As Boolean Valid = True If Sheets("Post").Range("B1") = "" Then Valid = False MsgBox "No Data In B1" End If If Sheets("Post").Range("B2") = "" Then Valid = False MsgBox "No Data In B2" End If If Sheets("Post").Range("B3") = "" Then Valid = False MsgBox "No Data In B3" End If End Function مرفق ملف مع الترحيل لأكثر من ورقه فى نفس الوقت السلام عليكم Valid_Post.rar
    1 point
×
×
  • اضف...

Important Information