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

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

  1. الصـقر

    الصـقر

    الخبراء


    • نقاط

      3

    • Posts

      1836


  2. ibn_egypt

    ibn_egypt

    الخبراء


    • نقاط

      2

    • Posts

      764


  3. ابو جودي

    ابو جودي

    أوفيسنا


    • نقاط

      2

    • Posts

      7053


  4. أ / محمد صالح

    أ / محمد صالح

    أوفيسنا


    • نقاط

      2

    • Posts

      4474


Popular Content

Showing content with the highest reputation on 01/30/15 in all areas

  1. السلام عليكم ورحمة الله وبركاته كل عام وانتم بخير اطلب المسامحة ممن راسلني ولم يجد رد مني هديتي لكم بعد هذه الغيبة Option Explicit '========================================================" ' بسم الله الرحمن الرحيم " '========================================================" ' (دالة تحويل الرقم الى نص باللغة العربية (تفقيط " ' kh_TextNum " '========================================================" 'Num الرقم " '========================================================" 'sex جنس العملة " 'FALSE ( فارغ او صفر مذكر ) " 'TRUE ( أو اي رقم غير الصفر مؤنث ) " '========================================================" 'sNameCurr اسم العملة الرئيسية مفرد " 'pNameCurr اسم العملة الرئيسية جمع " 'NameCurrDec اسم العملة الكسرية " 'Decimal_Count طول الكسر افتراضـياً : بدون اظهار الكسر " '===============================================================================================================================================" 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" '===============================================================================================================================================" ' ملاحظات ' (اولاً : العملة الرئيسية مثنى (يقوم بها الكود تلقائيا ' مع ملاحظة اذا اسم العملة ينتهي بالتاء المربوطة ' يجب ان يكتب كذلك وليس بالهاء ' ----------------------- ' ثانياً : اذا كانت العملة الرئيسية مفرد فارغاً تعتبر ' اسماء العملات (الجمع والكسري) فارغة تلقائيا ' ----------------------- 'ثالثاً : الكلمة الابتدائية بامكانك تغييرها او تجعلها فارغة Private Const MyBegTx As String = "فقط " ' "" ' ----------------------- ' MyTNum رابعا : يمكنك التغيير (اضافة,حذف,تحرير) في الثابت ' للفئات الصفرية للرقم ادناه Private Const MyTNum As String = "ألف-آلاف/مليون-ملايين/مليار-مليارات/بليون-بلايين/بليار-بليارات/ترليون-ترليونات/تريليار-تريليارات/كدرليون-كدرليونات" '===============================================================================================================================================" 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" '===============================================================================================================================================" Function kh_TextNum(Num As String, Optional sex As Boolean = False, Optional sNameCurr As String = "", Optional pNameCurr As String = "", Optional NameCurrDec As String = "", Optional Decimal_Count As Byte = 2) As String Dim Spp, zt Dim i%, ii%, pr% Dim MyMid$, nCurr$, Txt$, Txt1$, Txt2$ '====================================== If Not IsNumeric(Num) Then GoTo kh_Exit Spp = Split("/" & MyTNum, "/") ii = UBound(Spp) If Num < 0 Then Num = Abs(Num) '====================================== If Val(Num) > Val(String((ii + 1) * 3, "9") & ".999") Then GoTo kh_Exit '====================================== nCurr = sNameCurr & "-" & IIf(pNameCurr = "", sNameCurr, IIf(sNameCurr = "", "", pNameCurr)) '====================================== Txt1 = Format(Num, String((ii + 1) * 3, "0") & ".000") For i = 0 To ii MyMid = Mid(Txt1, (i * 3) + 1, 3) If MyMid Then zt = Mid(Txt1, (i * 3) + 4, Len(Txt1)) zt = IIf(ii - i, Int(zt), zt) Txt2 = IIf(ii - i, Trim(Spp(ii - i)), nCurr) pr = 1 + IIf(ii - i, 1, CInt(sex)) Txt = Txt & IIf(Len(Txt), " و", "") & kh_nText(MyMid, Txt2, pr, zt, CBool(sNameCurr <> "")) End If If i = ii Then If MyMid = 0 Then Txt = Txt & IIf(Len(Txt), " ", "صفر ") & sNameCurr Next '====================================== Txt = MyBegTx & Txt & kh_dText(Num, sNameCurr, NameCurrDec, Decimal_Count) '====================================== kh_Exit: kh_TextNum = Trim(Txt) End Function ' معالجة العدد من 1 الى 999 لكل فئات الرقم Private Function kh_nText(ByVal iNum As String, ByVal oMm As String, ByVal ibs As Integer, ByVal z As Boolean, ByVal tCu As Boolean) As String Dim Sp Dim Num1%, Num2%, Num3% Dim oM$, S$, S1$, nT$, nT0$, nT1$, nT2$ '====================================== Sp = Split("واحد,إحدى,اثنتان,ثلاث,أربع,خمس,ست,سبع,ثمان,تسع,عشر,إحدى ,اثنتا ", ",") '====================================== If ibs Then S = "ة": Sp(1) = Sp(0): Sp(2) = "اثنان": Sp(11) = "أحد ": Sp(12) = "اثنا " Else S1 = "ة" oM = Trim(Split(oMm, "-")(0)) '====================================== Num1 = Left(iNum, 1) Num2 = Right(iNum, 2) Select Case Num1 Case 1: nT0 = "مائة" Case 2: nT0 = "مائتا" & IIf(ibs = 2, IIf(Num2 < 3, "", "ن"), IIf(Num2 = 0 And oM <> "", "", "ن")) Case 3 To 9: nT0 = Sp(Num1) & "مائة" End Select '========================================= Num1 = Right(iNum, 2) Select Case Num1 Case 1, 2: If nT0 <> "" Then If ibs = 2 Then nT0 = nT0 & " " & oM Case 11 To 99: If oM <> "" Then If ibs Then If z Then oM = oM & "اً" End Select '----------------------------------------- Select Case Num1 Case 1 nT = IIf(oM = "", Sp(0) & S1, oM) oM = IIf(ibs <> 2 And oM <> "", Sp(0) & S1, "") Case 2 nT = IIf(oM = "", Sp(Num1), Replace(oM, "ة", "ت") & IIf(z = 0 And ibs = 2 And tCu, "ا", "ان")) oM = IIf(ibs <> 2 And oM <> "", Sp(Num1), "") Case 3 To 10 oM = Trim(Split(oMm, "-")(1)) nT = Sp(Num1) & S Case 11, 12 nT = Sp(Num1) & Sp(10) & S1 Case 13 To 19 nT = Sp(Num1 - 10) & S & " " & Sp(10) & S1 Case 20 To 99 Num2 = Right(Num1, 1) Num3 = Left(Num1, 1) If Num3 = 2 Then nT1 = "عشرون" Else nT1 = Sp(Num3) & "ون" nT2 = Sp(Num2) & IIf(Num2 > 2, S, "") & " و" & nT1 If Num2 = 0 Then nT2 = nT1 nT = nT2 End Select '====================================== S = IIf(nT = "" Or iNum < 100, "", " و") nT = Replace(nT, Sp(8) & "ة", Sp(8) & "ية") kh_nText = Trim(nT0 & S & nT & " " & oM) '====================================== End Function ' معالجة الكسر Private Function kh_dText(ByVal dNum As String, ByVal NCur As String, ByVal Ndec As String, ByVal co As Byte) As String Dim Td$, Td1$ On Error GoTo 1 If NCur = "" Then Ndec = "" Td = Format(Round(CCur(dNum - Int(dNum)), co), "0." & String(co, "0")) If Td = 0 Or Td = 1 Then Td1 = "": GoTo 1 If Len(Ndec) Then Ndec = " " & Ndec: Td1 = Td * CVar("1" & String(co, "0")) Else Ndec = " " & NCur: Td1 = Td Td1 = " و " & Chr(40) & Td1 & Chr(41) & Ndec 1: kh_dText = Td1 End Function دالة تحويل الرقم الى نص عربي.rar ================================================= الملف المعدل: هذا المرفق بامكانية تفقيط الكسر وامكانية ادخال كلمة نهاية النص دالة تحويل الرقم الى نص عربي.rar ================================================= رابط مباشر للملف
    1 point
  2. من أروع ما قرأت في موضوع رضا الناس هذه القصيدة التي لم أقف على صاحبها ولا حتى عنوانها ضحكتُ فقالوا ألا تحتشـم؟ ........ بكيت فقالوا ألا تبتسم؟ بسمت فقالوا يرائـــــــــي ........ عبست فقالوا بدا ما كتم صمتّ فقالوا كليل اللسان ........ نطقت فقالوا كثير الكلم حلمت فقالوا صنيع الجبان ........ ولو كان مقتدرا لانتقم بسلت فقالوا لطيشٍ بــــه ........ وما كان مجترئا لو حكم يقولون شـــذٌ إذا قلـــت لا ........ وإمّعةٌ حين وافقتـــــهم فأيقنتُ أني مهــــــما أُرِدْ ....... رضا الناس لابد من أن أُذَم طبعا هذا يخص الناس الذين ليس لهم همٌ سوى تتبع أخطاء الناس وإظهار أخطائهم حتى وإن لم يخطئوا أما باقي المعتدلين من الناس فيستسحنون الفعل الحسن ويستقبحون الفعل القبيح
    1 point
  3. بسم الله الرحمان الرحيم اقدم لكم اليوم طريقة تحويل تحويل ملف الاكسل الى exe ثم تغيير الايقونة ثم Setup نبدأ بالتحويل الى ملف تنفيذي تساعد هته العملية في حماية تشفيير الملف ويسعب بعدها اختراقه والعبث فيه لنقوم بهته العملية نحتاج الى برنامج يدعى XLtoEXE وهذا رابط تحميلة http://cpap.com.br/orlando/download2/XLtoEXE.zip البرنامج لا يحتاج لى تثبيت نقوم مباشرتا بفك الضغط عن الملف وفتح البرنامج اولا نختار الملف المراد تحويله كما في الصورة ثانيا الاعدادات الازمة في البرنامج ثم بعدها سيطلب منك مكان الحفظ اختر المكان ثم موافق ستلاحظ ان الملف حول الى ملف تنفيذي ولتتأكد من ذالك اعمل كليك يمين ثم خصائص وشاهد نوع الملف بعد فتحكم للملف اجري اي تغيرات و وافق على الحفط عند الخروج ستلاحظ ان الملف قد انشأ Backup اي انه صنع نسخة احتاطية لنفسه لاتقم بحذفها ملاحظة : يجب ان تكون تسمية الملف بالانجليزية لان التحويل لن ينجح اذا كانت بالعربية الأن نأتي الى تغيير ايقونت الملف الذي حولناه للقيام بذلك نحتاج الى برنامج Exe Icon Changer وهذا رابط تحميله http://www.mediafire...con_Changer.rar ملاحظة بخصوص برنامج تغيير الايقونات عليك بالغاء الحماية عند تثبيته بعد التثبيت اذهب الى التسجيل وادخل السريال المرفق مع الملف الذي حملته وهذا فيديو يشرح طريقة استعمال البرنامج http://www.youtube.c...h?v=NtZfTFVmGWc نأتي الى المرحلة الاخيرة وهي تحويل الملف الى برنامج Setup الفائدة من هذا البرنامج هي جمع جميع الاضافات التي تريدها مع الاكسل كالصور مثلا في ملف واحد وكذالك حماية الملف من الحذف حيث انه سيصبح لدينا راكورس للملف وهذا يحدث بعد التثبيت طبعا هذا رابط البرنامج http://www.jrsoftware.org/isdl.php بعد تثبيتك الى البرنامج نأتي الان الى طريقة العمل به وللقيام بذالك تابع الصور بالتوالي بعد الانتهاء ستجد عملك داخل الملف الذي اخترته على شكل Setup كأي برنامج عادي ولتشاهد ملف اجريت عليه كل ماسبق شاهد موضوعي برنامج خاص لاصحاب محلات بيع الموبيلات (شوقي ربيع) أكون الان قد انتهيت من شرحي المتواضع هذا ارجومن الله ان اكون قد وفقت فيه وأن تكون فائدته عامة على الجميع مع تحيات أخوكم شوقي ربيع
    1 point
  4. 1 point
  5. الحمد لله الذي جعل العلم ضياء والقرآن نوراً الحمد لله الملك الحق المبين ، الذي هدانا إلى الإيمان واليقين نحمــده تعالى وهـــو الرب الجليل ، الهادي إلى ســـواء الســـبيل ، الذي لا يخفى عليه الكــثير ولا القليــل . والصلاة والسلام على المبعوث في الأميين معلماً ورسولاً ومرشداً وحكيماً وأشهد أن لا إله إلا الله وحده لا شريك له أمر بإتباع الحق ونهى عن إتباع الباطل ، ورفع من شأن العالم دون الجاهل ، وأشهد أن سيدنا محمداً عبده ورسوله جــــاء بالحــــق المبــــين ، فكان رحمــــة للعالمين ، صلى الله عليه وعلى آله وأصــحابه وســـلم تســـليماً كــــثيراً . اللهم اجعل العام الهجري الجديد فاتحة خير علي المسلمين وبلاد المسلمين ا أحبائي واخواني في منتديات اوفيسنا الاحبة كشجرة الياسمين لا تكتفـــي أن تظـــلك بـــــــل لا تترككــ الا معطــــرا بعبيرهـــا فاســعد الله من كانوا دومــــا زهــــور الياسمــين في حـــياتنا . موضوعنا اليوم حول برنامج يخدم شريحة من الطلبات لادارة النشاط التجاري والخدمي وراعينا ان يكون البرنامج سلس ومرن ليتناسب مع اغلبية الاحتياجات . وايضا لاستكمال مواضعينا السابقة عن دمج الاكسل ببرامج التصميم المختلفة والتحكم في خصائص الادوات لليوزرفورم . برنامج نور التجاري والخدمي اول انتاج مشترك بيني وبين اخي الحبيب العبقري / شوقي ربيع في سلسلة البرامج الخدمية ان شاء الله تعالي . البرنامج يقوم بإدارة النشاط بصــفة عامة ، وادارة عمليات البيع بإصدار الفواتير ، وطباعتها ، واصدار ســـندات القبض وطباعتها ، وادارة العمليات المتعلقة بفواتير الشراء ومرودتها واثبات عمليات الشراء والاصناف واصدار سندات الصرف وطباعتها . الجديد في البرنامج كثيرا تم طرح نماذج فواتير بيع باضافة عدد محدد من التكسات بما يتناسب مع صفوف الفاتورة الواحدة لكن في البرنامج تناولنا الموضوع بطريقة اخري باضافة عدد تكسات رئيسية تقوم بترحيل الي ليست بوكس ومنها الي الشيت وبذلك يمكن اصدار الفاتورة بعدد لا محدود من الاصناف وطباعتها . شاشة الدخول اسم المستخدم وكلمة المرور الافتراضية admin الشاشة الرئيسية للبرنامج شرح واعداد البرنامج بالكامل اضغط هنا بالمرفقات اللهم اجعلنا ممن طاب ذكرهم ، وحسنت سيرتهم ، واستمر أجرهم في حياتهم وبعد موتهم اللهم امين Nour Commercial V 1.0.0.rar
    1 point
  6. طريقة عمل شاشة ( فورم ) ادخال وترحيل واستعلام وتعديل !! خطوة خطوة السلام عليكم اساتذة المنتدي وخبراؤه الكبار الاخوة الافاضل اعلم ان هذه الموضوعات قد قتلت بحثا وطلبا واجابة من الاعضاء وهناك امثلة كثيرة للاساتذة الافاضل الكبار والذي لايصل علمنا او ما لدينا كله الي ذرة واحدة من علمهم ولكني اردت ان اجعل المواضيع الاساسية في عمل اي برنامج في متناول الجميع بطريقة بسيطة وسهله اكثر ما يكون من خلال هذه السلسلة ( اعانني الله علي اكمالها كما ينبغي ) وقصدت ان يكون الموضوع بعنوان واضح ليستفيد منه الجميع عند البحث وسأقدم الشرح بطريقة الفيديو والاكسيل والورد احياناً (((( الدرس الاول )))) شاشة ( فورم ) لادخال بيانات والقيام بتسجيل وترحيل هذه البيانات الي صفحة الاكسيل و الاستعلام من خلالها عن طريق نفس الفورم والتعديل ايضا في البيانات في حالة ما اردنا التعديل في بيان قد سبق ادخاله وطبعاً والاكيد كله من علمكم اساتذتي الكرام الاجلاء وفي الدرس القادم سنتعرف علي بعض الاكواد المعاونة لشاشة الادخال او بمعني ادق اكواد نحتاجها مع شاشة الادخال مثل (تنسيق التكست بوكس ، الترقيم التلقائي في تكست معين ، تنسيق التاريخ في التكست بوكس .... ) واي استفسار .... في الخدمة دائما ... واي شئ غير واضح في الشرح علي استعداد تام لشرحه مرة اخري ومرات اخري واليكم ايضا في المرفقات : 1- ملف اكسيل به الاكواد والشرح هذه المرة داخل الكود ( تم شرح الكود سطر سطر بطريقة وافية وبسيطة جدا داخل الكود نفسه ) 2- عدد ( 3 ) ملف فيديو يشرح طريقة التصميم واضافة الاكواد وكذلك مشاهدة النتيجة جزاكم الله خيرا اساتذتنا اكسيل ..طريقة عمل شاشة ادخال 1.rar فيديو 1 .. طريقة عمل شاشة ادخال 1.rar الملف الفيديو الثاني والثالث في المشاركة التالية حيث لم يمكنني اضافتهم هنا
    1 point
  7. السلام عليكم ورحمة الله وبركاته أخواني الفضلاء يسعدني ان اقدم لكم [الاصدار الخامس] من شيت التعليم الفني اهم المميزات 1 ) اضافة ورقتان وهما راسب وليس له حق الاعادة راسب وله الحق الاعادة يتم الترحيل لهم بواسطة زر الترحيل في ورقة الشيت لتصبح الورقات المرحلة 4 بدلاً من 3 2 ) تم اضافة عمود بجوار المادة رقم 20 وفائدة هذا العمود هو ادخال النتيجة يدوي بمعني ان المعادلة ستنفذ كما كانت من قبل بالشكل الطبيعي ان كانت الخلية فارغة في العمود المضاف جديد اما اذا تم وضع كلمة له دور ثان للمادة في الخلية في العمود المضاف جديد سيتم رسوب الطالب في المادة وقمت بعمل ذلك نظرا للخلاف الذي تم في مادة العملي!!! 3 ) اضافة عمود حالة الطالب يدوي في ورقة الشيت وقمت بعمله بسبب الخلاف ايضاً الذي تم في كيفية رسوب الطالب ونجاحه وهذا العموود يساعد في تنفيذ حالة الطالب كما يتراى لك 4 ) تغيير المعادلات الموجودة في حالة الطالب لتقسم الطلبة اربع حالات وهي ناجح راسب له حق راسب ليس له حق له دور ثان بدلا مما كانت عليه سابقا حيث كان التقسيم الى ثلاث حالات فقط 5 ) اضافة ثلاث تقسيمات في ورقة نتيجة الدور الثاني في عمود حالة الطالب وهما ناجح وراسب له حق وراسب ليس له حق بدلا من اثنين فقط تنويه : 1 ) احب ان اكرر الشكر للاستاذ // أحمد ايمن لمجهوداته في معرفة قوانين التعليم الفني 2 ) للعلم انا لا اعتبر هذا الاصدار اصدار بالمعنى ولكني اعتبره ملحق للاصدار الرابع 3 ) عند وجد اي خطا انا في انتظاركم لتعديله والسلام عليكم ورحمة الله وبركاته.. التحميل http://www.gulfup.com/?ft36DG
    1 point
  8. السلام عليكم ورحمة الله وبركاته أساتذتى الكرام : اللذين أدين لهم بالفضل والعرفان بكل ما تعلمته فى الإكسيل أحبابى وأصدقائى : أعضاء منتدانا العريق ( منتدى أوفيسنا ) أقدم لكم كنترول الإعدادى رجب جاويش الإصدار رقم 15 للترمين والدور الثانى 2015 يشمل كل الأعمال الخاصة بالترم الأول والترم الثانى والدور الثانى ملاحظات هامة يمكن إختيار الفرنسى للمحافظات المطبق عليها الفرنسى أو اختيار بدون للمحافظات التى لا يطبق عليها الفرنسى ويمكن اختيار الانجليزى مستوى رفيع للمادرس التجريبية يصلح لأى قرار وزارى سواء 313 أو 460 تحية لمنتدانا الغالى ولأعضائه الكرام وعذرا لأى خطأ أوسهو أخوكم رجب جاويش بعض واجهات البرنامج كنترول الإعدادى رجب جاويش الإصدار 15.rar
    1 point
  9. الموضوع منقول من احد المنتديات الان يمكنك تجزئة الاسم الكامل إلى اسم اول - اسم ثاني وهكذا مع مراعاة الاسماء المركبة فواصل الاسم.rar
    1 point
  10. السلام عليكم ورحمة الله وبركاته ممكن المساعدة فى عمل برنامج مسئول السيارات والواقود 1 إدخال جميع بيانات المركبات التابعة للشركة مثل رقم اللوحة، رقم السيسي ، رقم الموتور، النوع، الموديل، لون السيارة ، نوع الرخصة ،تاريخ بداية الرخصه ، تاريخ نهاية الرخصة ، تكلفة الرخصة ، نوع الوقود ، التخصبص ، اسم السائق،ملاحوظات وغيرها من البيانات 2 إدخال جميع الخدمات والإصلاحات التي تم تقديمها للمركبة مثل غيار الزيت، البريكات، تغيير الإطارات، الوقود، المخالفات وغيرها، مع تواريخ هذه الخدمات. 3 التذكير بشكل آلي بتاريخ الخدمات التي يجب تقديمها لكل مركبة مثل غيار الزيت، تغيير الإطارات، الترخيص وغيرها حسب عدد الكيلومترات المقطوعة أو حسب التاريخ. 4 إدخال قراءة العداد لكل مركبة يومياً لمعرفة المسافة التي قطعتها. 5 اظهار العداد السابق عند تمويل السيارة بالوقود 6 إدخال تفاصيل أوامر الحركة للمركبات مثل: التاريخ، ساعة الخروج، ساعة العودة، الجهة، السائق. 7 طباعة العديد من التقارير لكل مركبة لمعرفة المسافة التي قطعتها وتكاليف الخدمات التي قدمت لها ومقارنتها مع المركبات الأخرى. التقارير يتضمن النظام تقارير متنوعة مثل: ·تقرير الصيانات المتوقعة ·تقرير الصيانات المتأخرة ·تقرير با والسيارات التي لم تدخل الصيانة ·تاريخ كل سيارة ·تقرير حركة كل سيارة ·تقارير بالوقود المنصرف =نوع الوقود+الكمية + العداد اول الفترة + العداد اخرالفتره +المسافه+ك/م+التكلفة +التخصيص +اسم السائق تقريرالوقود شهرى+ربع سنوى_نصف سنوى+سنوى ·تقارير الزيوت =الكمية + التكلفة سنوى ·كشف بالمصاريف واجمالياتها 8 يكون هناك مستخدم واحد لديه كافة الصلاحيات من حذف وأضافة ويوزع الصلاحيات على المستخدمين الاخرين 9 واجهة مستخدم باللغة العربية البرنامج مهم جدا فى مجال عملى ولكم جزيل الشكر
    1 point
  11. السلام عليكم ورحمة الله تعالى وبركاته انا كنت طلبت من الاستاذ ابو خليل جزاه الله عنا كل الخير نموذج لصلاحيات المستخدمين يتحكم فى تفعيل وعدم تفعيل الازرار طبعا لاستاذى كل الشكر والتقدير لم يضن على او يبخل او يتأخر جزاه الله عنا كل الخير ان شاء الله واسأل الله عزوجل ان يزيد فى علمه ويبارك له فيه وأن ينفعه بما علمه وان يبارك له فى عمره وعمله ولكن كنت اتمنى دمج الاكواد التى تخص التحكم بالازرار وذلك بإيقاف عملها او تفعيلها حسب صلاحيات كل مستخدم كما كنت اتمنى اكثر ان يكون ذلك ضمن اى ملف ينتج عن اضافة الصلاحيات بأدآة اليوزر ميكر فكما تعلمون اقوم حاليا بتطوير تلك الأدآه وطرحت من قبل موضوع بذلك ولكن كنت اتمنى ان اضيف عليها نموذج يعمل على التحكم فى كل عنصر وذلك حسب صلاحيات كل مستخدم طبعا فشلت فى تطوير تلك الآداه وهى مضاف إليها التشفير فقمت بإلغاء التشفير وهذا لانى كما تعلمون مجرد هاو ومبتدئ وبفضل الله ثم بفضل تعليماتكم وتوجيهاتكم اهتدى فلكل من ساعدنى او حتى حاول او حتى ساندنى م بالدعاء فى هذا الصرح الشامخ كل الشكر والتقدير من يريد ان يضيف التشفير فليتفضل ولكن الاهم تقريبا انا وصلنت لنسبة 99% ولكـــــن هناك مشكلة واجهتها لم استطع حلها وهى كلاتى على سبيل المثال المستخدم السادس فى المثال المرفق بإسمى انا اسير الشروق لم اضف له من صلاحيات العناصر الا عنصر واحد فقط برقم المستخدم وهو الزر رقم 6 الاستاذ ابو ألاء أضفت له العنصر رقم 2 ضمن صلاحياته ولكن هذا فى النموذج main ملاحظة هامه لفتح الجدول users نلاحظ عناصر بإسم z1 z2 z3 z4 z5 z6 z7 z8 وهنا نموذجين ضمن التصميم النموذج الاول main ويحتوى على عناصر بنفس الاسم ان اردت وضع تلك العناصر فى الصلاحيات طبعا قلت عناصر لانها ممكن تكون زر امر او مربع تحرير وسرد او مربع قائمه او مربع نص النموذج الثانى mform انا اضفت عناصر مختلفه ولكنها تأخذ نفس الاسم لذلك تطبق عليها نفس الصلاحيات المشكله التى اواجهها لو اردت مثلا للمستخدم رقم 6 الذى يتم الدخول له بواسطة الاسم اسير الشروق من خلال رقم سرى 5 كما هو مبين من واجهة البرنامج اريد له صلاحية استخدام العنصر رقم 1 فى النموذج main ولكن اريد ايقاف العنصر رقم 1 لنفس المستخدم فى النموذج mform مثل الفكرة المستخدمه فى نموذج Users Ability حاولت عملها ولكن لم يأذن الله حتى الان بحل تلك المعضلة التى اقع فيها وأواجهها اتمنى مساعدتى ان امكن وجزاكم الله خيرا لانى تعبت ولم اجد حل هناك تصور ولكن لم استطع عمله على ارض الواقع وهو ان يتم اضافة حقل usergroup داخل الجدول user ويتم اعطاء الصلاحيات على حسب الاتى admn , user , designer , developer مثلا ويتم تخصيص الصلاحيات للمجموعه ويتم اضافة المستخدم لكل مجموعه على حسب الرغبه ولكن بصراحه عجزت عن تنفيذ هذا التصور فأن امكن مساعدتى لكم جزيل الشكر وجزاكم الله خيرا للعلم الفكرة من وحى خيالى المثال المرفق غير موجود فى مكان اخر وتحدى officena.rar
    1 point
  12. السلام عليكم ورحمة الله وبركاته في المرفق تعديل على معادلة للأخ الكريم عبدالله المجرب بحيث نحصل على آخر قيمة تم تسجيلها بشرط محدد دون الحاجة الى معادلة الصفيف max ( if تحياتي هاني بدر VLOOK2ALL_NEW.rar
    1 point
  13. تفضل اخي الفاضل بصيغة 2003 برنامج طباعة الباركود.rar
    1 point
  14. نسيت حاجه frm-UserLogon فى كل مره يتم الدخول باسم تجدون اختلاف لكل اسم حسب صلاحياته من الجدول users وهم كالاتى أبوخليل صلاحياته مطلقة استخدام كل العناصر الرقم السرى للدخول 1 ابو الاء صلاحياته استخدام العنصر الثانى فقط الرقم السرى للدخول 2 علي المصري صلاحياته استخدام العنصر الثالث فقط الرقم السرى للدخول 3 حسين العربي صلاحياته استخدام العنصر الرابع فقط الرقم السرى للدخول 4 اسير الشروق صلاحياته استخدام العنصر الخامس فقط الرقم السرى للدخول 5 لتبديل المستخدمين لترى الفرق استخدم النموذج frm-UserLogon
    1 point
  15. اخى الفاضل تفضل الملف المرفق لربما به طلبك ... اضغط زر احضار البيانات في شيت دور ثان تحياتي ayman.rar
    1 point
  16. أخى الفاضل أ.إبراهيم انسخ هذا الكود والصقه مكان الكود الموجود ومرفق الملف للتوضيح .. لعله طلبك ان شاء الله Sub sum_() Set ws = Worksheets("Sheet1") '------------------ For HM = 3 To 12 '------------------ ws.Cells(17, HM) = WorksheetFunction.SumIfs(ws.Range("O4:O12"), ws.Range("G4:G12"), ws.Cells(16, HM), _ ws.Range("B4:B12"), ws.Cells(17, 1), ws.Range("A4:A12"), ">=" & CLng(ws.Cells(15, 3)), ws.Range("A4:A12"), "<=" & CLng(ws.Cells(15, 6))) Next End Sub تحياتي sumifs.rar
    1 point
  17. أقصد موديول رقم 4 - بهذا الشيت خزينة - 2015.rar
    1 point
  18. هذا الرابط ادناه شرح تحويل الاكسيل الي ملف تنفيذي ولكن نسخه برنامج التحويل والتسطيب قديمه فهل من خبراء المنتدي ايجاد نسخه جديده http://www.officena.net/ib/index.php?showtopic=49169
    1 point
  19. الحلقة الثالثة عشر ******************* السلام عليكم ورحمة الله وبركاته إخواني الأحباب في المنتدى الأغر ..نأسف على عدم فتح الباب الفترة اللي فاتت بسبب البرد الشديد ، وبعد ما الجو اتظبط شوية نقدر نفتح الباب عشان الشمس تدخل وتدفنيا.. من أول الحلقة دي إن شاء الله هنبدأ نتعامل مع مهارات التعامل مع محرر الأكواد ، عايزين نوصل للأحتراف .. هنتكلم عن مهارة كتير بنحتاج نتعلمها ، ألا وهي الفرز أو الترتيب أو ما يطلق عليها باللغة اللي مش عربية Sort هنشتغل عملي علطول (أو على عرض ..مش هتفرق كتير) ..نفتح مع بعض ورقة عمل ، ومحدش يستنى مني إني أرفق ملف ، لأنك عشان تتعلم يبقا لازم تشتغل بايدك سيبك بقا من شغل النظري اللي مبيوكلش عيش ده ! افتح يا محسن ، شعارنا في الحلقات افتح (مرة افتح الباب ..افتح مصنف جديد ..افتح الخيارات في البرنامج ..افتح محرر الأكواد .. وشوية واحد هيقولي لو مبطلتش رغي هآجي أفتح دماغك وأريح الناس من رغيك) نفتح ورقة العمل ونكتب شوية بيانات عشان هنشتغل عليها ...وعشان أريحكو أدي شوية بيانات بدل ما تتعبوا ايديكم يا أحباب ، أنا بردو يهمني راحتكم م الاسم النوع 1 ياسر ذكر 2 احمد ذكر 3 ابراهيم ذكر 4 حسام ذكر 5 سليم ذكر 6 ماجدة أنثى 7 هدى أنثى 8 محمد ذكر 9 دينا أنثى 10 نور ذكر 11 رضا ذكر 12 سلمى أنثى 13 فاروق ذكر 14 شهد أنثى 15 كمال ذكر 16 طارق ذكر 17 هدير أنثى 18 سارة أنثى 19 أميرة أنثى حدد البيانات وتعالى لورقة العمل في الخلية A1 ، واعمل كليك يمين ، ثم اختر Paste Special (لصق خاص) ثم اختر من النافذة اللي هتطلع لك Text ، بكدا هتلاقي عندك 3 أعمدة (عمود للمسلسل ودا عشان مسلسل افتح الباب ، وعمود الأسماء ، وعمود النوع.. ) ويا ريت ننسخ البيانات في نطاق تاني مرة تانية لأننا هنجرب عليها أكتر من تجربة (ضعها مرة أخرى في النطاق K1:M20 مثلاً )!! المطلوب : ترتيب البيانات حسب الاسم ، ودا أمر بسيط جدا ومش معقد أبداً .. طريقة الحل : نروح للتبويب Developer ثم نختار Record Macro ثم نقف في الخلية A1 في بداية البيانات ، ونروح للتبويب Data ثم الأمر Sort ونختار من الحقل اللي اسمه Sort By نختار الاسم (لأن هو دا الحقل المطلوب الترتيب على أساسه) ، وفي الحقل الثالث المسمى Order (ودا شكل الترتيب ونختار يا أستاذ مختار A to Z (هتلاقي هو دا الخص الافتراضي أقصد الخيار الافتراضي ) يعني الترتيب أو الفرز حاجة من اتنين يا إما تصاعدي A to Z (من تحت لفوق) ودا بيسموه الجماعة اللي ما يتسموا (Ascending) أو تنازلي Z to A (من فوق لتحت) ودا اللي بيسموه في اللغة الأجنبية Descending ، وعشان ميحصلش عندك لخبطة الكلمة Ascending بتبدأ بحرف الـ A تبقا دي A to Z (الترتيب التصاعدي) !! كل دا إحنا بنسجل يا حسين (اعدل الكرافتة عشان صورتك تطلع حلوة) ..Stop أنا المخرج وبقول Stop يعني وقف التسجيل .. ياااااااه كانت حلقة صعبة أوي الحلقة دي ، التسجيل بيحتاج مجهود جبار عشان تطلع الحلقة حلوة ولذيذة !!! دلوقتي جه وقت الجد ، اللي إحنا منعرفوش ، ندخل المغارة (على رأي الكبير حسام عيسى ..صقر المنتدى) ، هندخل المغارة عن طريق Alt + F11 معلومة قديمة ، طيب هندخل نعمل ايه ؟ أكيد هندخل عشان ندور على الكنز ..مش دي بردو مغارة ياسر بابا !! هنلاقي الكنز بس مدفوووووووون تحت الأنقاض Sub Macro1() ' ' Macro1 Macro ' ' Range("A1:C20").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:C20") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub دا اللي إحنا سجلناه ..إحنا طلعنا شطار وبنعرف نسجل كويس جداً ..الكنز فين يا نور العين؟ الكنز مدفون ما بين الأسطر ..إزاي نقدر نخرجه.. أقولكم دا كله هتش !! اللي عمله محرر الأكواد في سنين هنختصره إحنا في ثانية واحدة وبسطر واحد (وهي دي الشطارة !!) Range("A1:C20").Sort Key1:=Range("B1:B20"), Order1:=xlAscending, Header:=xlYes ضع هذا السطر اللذيذ في إجراء فرعي وجربه ، هنلاقي إنه يبنفذ نفس الكود الطويل اللي سعادة محرر الأكواد سجله . طيب نهضم السطر اللي اتكتب : أول شيء عشان تقدر تتعامل في أي كود إنك تحدد الخلية أو النطاق اللي هتتشغل عليه ، وأظن دي واضحة جدا ، فالنطاق اللي هنشتغل عليه واللي فيه البيانات هو A1:C20 ، وممكن في الكود نحدد أول خلية في النطاق بس يعني ممكن يكون شكله كدا : Range("A1") بس أنا أفضل إننا نكتب النطاق بالكامل ، وبعد ما حددنا النطاق ، نطلق الحدث أي الفعل ، يعني السؤال المتوقع ايه المطلوب نعمله في النطاق : الإجابة نطبطب عليه وندلعه ، إجاية غير صحيحة ، الإجابة إننا نفرسه (هذه هي الإجابة الصحيحة ..نعم نفرزه ونرتبه زي ما إحنا عايزين) والفرز بيكون بكلمة Sort ونترك مسافة واحدة بالمسطرة بعد الفرز .. ونبدأ نشوف حاجة اسمها بارامترات الحدث Method ، ودي ممكن نشوفها في تسجيل الماكرو اللي قام بيه محرر الأكواد .. إحنا هناخد المهم وبس ، ميهمناش الدش الكتير !! أول بارامتر هو مفتاح الفرز أو الترتيب Key، بمعنى آخر المقصود بيه العمود اللي هيتم على أساسه الفرز ، والعمود هنا هو عمود الأسماء B1:B20 ، ونفس الكلام ممكن نستغنى عن النطاق بالكامل ونذكر فقط أول خلية في العمود B1 بالشكل ده Key1:=Range("B1") طيب محدش سأل ايه الواحد اللي جنب المفتاح (دا الحارس الشخصي للمفتاح عشان محدش يسرقه) ..الواحد ده يا أساتذة هو المفتاح الأول لعملية الفرز ، وهنفهم الحتة دي لما ناخد مثال تاني ... بعد كلمة Key1 نقطتين فوق بعض (Shift + حرف الكاف : ) وسواء وإنت بتكتب عربي أو إنجليزي (الاتنين سواسية).. يليها علامة يساوي .. ومعروف إن علامة يساوي ييجي بعدها قيمة ، ونترجم الكلام ده إن قيمة المفتاح الأول هو النطاق B1:B20 (أفضل إنه يتكتب نطاق العمود بالكامل) ناخد فاصل ، لا مش هنريح يا عبد الله ، أقصد فاصلة مش فاصل ، الفاصلة دي هي اللي بتفصل بين البارامترات يا أحباب .. ننتقل للبارامتر الثاني والمسمى Order ودا ترجمته يا أخ ابو سليمان (الترتيب ..) دلوقتي هتدعي عليه ، وتقولي يا عم إنت مش قلت كلمة Sort دي معناها ترتيب ..أيوا مش هنكر ..بس عشان تتضح الصورة كلمة Sort هنا فعل أو حدث Method ، أما كلمة Order تعتبر زي الاسم وممكن نقول إن البارامترات دي وصف لكيفية حدوث الحدث ، أي الطرق المؤدية لحدوث الحدث !! أنا تهت زيكم بالظبط المهم المقصود منها نوعية الترتيب هنا (هل الترتيب تصاعدي أم تنازلي) ، وبردو كلمة Order جنبها رقم واحد (الحارس الشخصي) ..يليها نقطتين وعلامة يساوي ، وقيمتها إما xlAscending أو xlDescending (أظن مفهومة يا أبو سليمان) ناخد فاصلة تانية وأوعدك دي تكون آخر فاصلة في السطر ده ..البارامتر الثالث هو المسمى Header ودي ترجمتها حقول البيانات أو عناوينها .. نسأل هل للبيانات اللي موجودة عناوين ولا لا ؟؟ م ، والاسم ، والنوع (دي عناوين أو حقول للبيانات) .. الإجابة نعم xlYes معلومة جديدة نستفيد منها إن الحدث Mehod قد يتبعه بارامترات ، وتأتي هذه البارامترات بعد الحدث Method بمسافة بينهما ، يعني اللي بيفصل بين الحدث والبارامترات هي المسافة (دي المحرم..) ..أما البارامترات فبيتم الفصل بين كل واحد وأخوه بفاصلة , .. حاجة تانية لما تلاقي النقطتين فوق بعض وبعدين علامة يساوي تعرف إن دا بارامتر .. يا رب تكون المعلومة مفيدة. طيب سؤال من الأستاذ طارق : هل البيانات لازم يكون فيها عنوان عشان نعمل فرز ؟؟ جاوب إنت يا عبد الكريم ، عبد الكريم : يا أستاذ طارق طالما فيه بارامتر بيسأل هل فيه عنوان أو مفيش ، يبقا أكيد ممكن إننا نفرز من غير عناوين البيانات .. الله ينور عليك يا أستاذ عبد الكريم ، وميحرمناش منك ، فعلا الكلام دا صحيح .. نشوف السطر ده بيأدي نفس الغرض ، استغنينا عن صف العناوين : Range("A2:C20").Sort Key1:=Range("B2:B20"), Order1:=xlAscending, Header:=xlNo النطاق بدأ من A2 بعيداً عن عناوين البيانات ، والمفتاح كمان بدأ من B2 ، ونخلي بالنا من قيمة البارامتر Header هنلاقيه xlNo (يعني مفيش عناوين). ********************************* ننتقل لجزئية تانية .. الجزئية اللي فاتت أخدت حقها وزيادة ، دلوقتي واحد بيبص لي وبيقولي ايه شكل البيانات الملخبطة دي ..حد يفرز الأسماء ويخلي كله مع بعضه (ذكور مع إناث) دا إنت راجل محترم حتى عيب عليك !! ..ردي : أنا آسف والله يا حاج محمد مكانش قصدي ، دا كان مجرد مثال عموما عنيا ليك هنعيد ترتيبهم زي ما إنت عايز (حضرتك أكيد عايز الذكور أولا وبعدين الإناث ) ..رد وقال : كدا عين العقل .. بسيطة يا حاج محمد : السطر الخاص بالفرز هنزود عليه مفتاح كمان ، وشكل لترتيب المفتاح الجديد ... قبل ما أضع السطر ..عايزين نعود نفسنا إننا ندي نفسنا مساحة من التفكير قبل التنفيذ .. الفرز المرة دي هيكون على عمودين (مين قبل مين .. يعني عمود الاسم الأول ولا عمود النوع ؟؟ الإجابة بسيطة عمود النوع عشان نفصل بين الذكور والإناث : أي خدمة يا حاج محمد) إذاً الفرز هكيون لعمود النوع (ذكر ، أثنى ) ، نبص في أول حرف في ذكر وأول حرف في أنثى (محدش يبص على كل الحروف عيب) أول حرف هو حرف الذال في كلمة ذكر ، وألف في كلمة أنثى : طيب الكلمتين دول الألف الأول ، بمعنى تاني لو تركنا الخيار xlAscending اللي هو الترتيب التصاعدي بكدا هيكون الإناث الأول وبعدين الذكور حسب الترتيب الأبجدي ، إذاً في الحالة دي هنكتب xlDescending (عشان تتم عملية الفرز ذكر ثم أنثى) نأتي للتطبيق العملي : ها هو السطر ... Range("A1:C20").Sort Key1:=Range("C1:C20"), Order1:=xlDescending, Key2:=Range("B1:B20"), Order2:=xlAscending, Header:=xlYes هنشبه السطر دا بشقة ليها بابين : أقصد بالبابين عمودين الترتيب (عمود النوع ثم عمود الأسماء) ، كل باب له مفتاح عشان يفتح بيه .. الباب الأول عمود النوع ومفتاحه رقم 1 ، وشكل ترتيبه أو نوع ترتيبه تنازلي (عمود النوع) Key1:=Range("C1:C20"), Order1:=xlDescending والباب التاني ومفتاحه رقم 2 ، وشكل أو نوع ترتيبه تصاعدي (عمود الأسماء) Key2:=Range("B1:B20"), Order2:=xlAscending طبعا المفتاح ده ميشتغلش على ده ، ولا ده يشتغل على ده ، إنما ده لده وده لده (معلش هيست شوية) مفتاح النوع هيعتمد على النطاق C1:C20 ، ومفتاح الأسماء هيعتمد على النطاق B1:B20 ، كل مفتاح يلعب في ملعبه أقصد في بابه ، أقصد في العمود الخاص بيه. وبكدا لما ننفذ السطر اللي فات ، نقدر نحصل على النتيجة التي ينتظرها الحاج محمد.. الحاجة أم محمد شكلها مكشر وزعلت وبتقول بالإنجليزي : Ladies First يا مان (معلش أصلها مثقفة حبتين) أوك يا حاجة ولا تزعلي نفسك .. الفكرة بأبسط مما تتخيلي غيري كلمة واحدة ، وألا أقولك متتعبيش نفسك شيلي حرفين وحطي حرف واحد بس شيلي حرفي De في كلمة Descending وحطي حرف الـ A (شفتي بقا إنها بسيطة .. متنسيش الفطير عشان مستر حسام) يا للروعة !! الحاجة أم محمد مش مصدقة نفسها .عموما جربوا (مش تجربوا الكود .. جربوا فطير أم محمد هيعجبكم جداً ، وبعد ما تاكلوا وتتمتعوا بالفطير جربوا الكود بعد التعديل ..) ********************************* ننتقل لجزئية أخيرة تهم نفس الموضوع ...ألا وهي ألا وهي (تصدقوا نسيت) افتكرت .. إزاي أخلي النطاق غير محدد أو ديناميكي .. إحنا لما اتعاملنا مع النطاق حددنا النطاق لحد الصف رقم 20 في المثالين اللي فاتوا .... عايزين يكون الكود مرن ، يعني يمشي مع أي عدد من الصفوف ، لأن قواعد البيانات معروف إنها مش ثابتة .. يبقا المطلوب الجديد إننا نخلي آخر صف مفتوح ، أو من خلال الكود نخلي محرر الأكواد هو اللي يحدد آخر صف مش إحنا .. مستر حسام عيسى تناول (الفطيرة بتاعت أم محمد) وأيضاً تناول هذه النقطة في شرح رائع له .. نشرحها تاني ..ونخلي بالنا ، وخلينا جد بقا شوية ومركزين أوي لأن الحتة دي تقريبا مفيش مبرمج بيستغنى عنها (آه والله زي ما بقولكم كدا) نفرض دلوقتي إننا مش عارفين آخر صف ..نجيبه إزاي .. الإجاية نسجل ماكرو (واحد مبرق ومش فاهم أيوا هنسجل ماكرو ..بردو مبرق ) بص يا مبرق : ابدأ تسجيل و تعالى في العمود الأول A واقف بعيد تحت بعد البيانات بمسافة كبيرة وليكن مثلا A100 ، وبعدين اضغط Ctrl + سهم لفوق من لوحة الأسهم .بس خلااااص انتهى التسجيل ، نروح لمحرر الأكواد هنلاقي الشكل ده Range("A100").Select Selection.End(xlUp).Select وممكن نختصره في سطر واحد بس إننا نشيل كلمة Selection ونحط مكانها النطاق Range("A100").End(xlUp).Select عايز تطبق الكود ده ، روح لأي خلية بعيدة في أي عمود واضغط Alt+F8 وشوف الماكرو اللي فيه السطر اللي فات اسمه ايه واضغط Run.. نفهم إزاي هنستغل الحتة دي في إننا نعرف آخر سطر به بيانات في العمود A .. نقطة البداية هي A100 ، والكلمة End(xlUp) دي لما ضغطنا Ctrl وسهم لفوق المحرر ترجمها كدا ، يعني اطلع لفوق Up يا سفن أب يا لذيذ يا رايق (ما هو لازم نهضم الفطير اللي أكلناه) طيب واحد بيقولي بس دا مش حل لأني أساسا معرفش البيانات دي آخرها فين ، بلاش استعباط .هرد عليه وأقوله : الله يسامحك ، ما هو لو صبر القاتل ع المقتول كان مات لوحده ... إحنا هنخلي رقم الصف 100 هو آخر صف في ورقة العمل ، بالنسبة لـ 2003 آخر صف 65536 ، أما في 2007 فما فوق فعدد الصفوف 1048576 (يا دي الحيرة ..يعني نغير رقم 100 لأي رقم فيهم) ..اللي يحيرك طيره ، يعني لا هنستخدم الرقم ده ولا ده إحنا هنخلي المحرر هو اللي يعد الصفوف كلها بالسطر ده ، سبق وشرحناه في النافذة الفورية MsgBox Rows.Count بس إحنا مش عايزينها في رسالة ..دا بس عشان تتضح الصورة ، كلمة Rows تعني صفوف يا أبو سليمان ، وكلمة Count يعني يا محرر اتفضل عد. هكيون الناتج لتنفيذ السطر اللي فات مختلف حسب إصدار الأوفيس اللي عندك ، لو 2003 هيطلع الناتج 65536 ، ولو الأوفيس 2007 فما فوق هيطلع الناتج 1048576 (أكيد فيه ناس تاااهت مني .. الفطير عمل عمايله معاكم) يرجع مرجوعنا لموضوعنا الأصلي عرفنا عدد الصفوف من خلال محرر الاكواد ، يبقا هنشيل رقم 100 ونحط Rows.Count وبس Range("A" & Rows.Count).End(xlUp).Select نخلي بالنا الرقم 100 كان داخل أقواس التنصيص ، لكن لما استخدمنا الجملة Rows.Count الأقواس طردتها براها ، لأنها الأقواس مش بتقبل المتغير ، وعدد الصفوف هنا يا أحباب وركزوا متغير حسب الإصدار ، لكنها بردو حنينه مهانش عليها تطرده قامت حضنته بعلامة & عشان يكون جنبها طيب نرجع تاني للهدف من دا كله إننا نعرف رقم آخر صف فيه بيانات ، إحنا بالسطر الأخير عرفنا نحدده لكن إزاي نعرف رقم صفه .. هنشيل Select ونحط Row وبس .. لا محدش يقولي بس !! كدا السطر دا بالشكل ده Range("A" & Rows.Count).End(xlUp).Row لو نفذت السطر ده هيقولك محرر الأكواد يا أهبل ايه ده ويطلع لك رسالة خطأ Invalid Use استخدام خاطيء.. السطر صحيح ، بس السطر عبارة عن رقم (اللي هو رقم الصف الأخير اللي فيه بيانات) بس الرقم دا مينفعش يقف لوحده يخاف ياخد برد .. لازم نحط الرقم ده في متغير .. Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row MsgBox LR عملنا متغير باسم LR ودي اختصار Last Row أو الصف الأخير (بس التسمية اختياري يا شباب) ووضعنا قيمة للمتغير اللي سميناه LR في السطر الثاني ، فأصبح المتغير LR يحمل الآن رقم الصف الأخير وفي السطر الثالث عشان نختبر مدى صحة الكود ونشوف النتيجة عملنا رسالة يظهر فيها قيمة المتغير .. ** ملحوظة هامة : ممكن السطر الثاني نستخدم كلمة Cells بدلاً من كلمة Range بس هيكون التركيب مختلفة شوية ، لأن مع كلمة Cells بيكون فيه جزئين : الجزء الأول رقم الصف والجزء الثاني رقم العمود ، معنى الكلام ده إن Cells بتتعامل مع أرقام ، فيكون شكل الكود اللي فات لو استخدمنا Cells بهذا الشكل : Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row MsgBox LR طبعاً Rows.Count تمثل رقم آخر صف به بيانات ، ورقم واحد بيمثل رقم العمود الأول A >>>>> نفذ الكود سواء اللي فات أو اللي قبله !! هنلاقي رقم الصف الأخير طلع في رسالة (أنا طلعت عيني وأكيد إنتو كمان .. يعني اللفة الطويلة دي عشان نعرف رقم آخر صف به بيانات.) دلوقتي جه الوقت إني أودعكم .. نشوف شكل الكود في النهاية هيكون عامل إزاي Sub SortData() Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row Range("A1:C" & LR).Sort Key1:=Range("C1:C" & LR), Order1:=xlDescending, Key2:=Range("B1:B" & LR), Order2:=xlAscending, Header:=xlYes End Sub دا الكود اللي هيرتب الذكور ثم الإناث ، وبعدين يرتب الأسماء ، في النطاق اللي بيبدأ من A1:C ورقم آخر صف ..لاحظ إننا شلنا رقم 20 من الكود الأصلي اللي شرحناه من بدري ، واستبدلناه بالمتغير LR والذي يحمل قيمة رقم آخر صف...!! لتجربة الكود أضف اسماً جديدا ونفذ الكود مرة أخرى ستجد أن الاسم الجديد قد انتقل لترتيبه ، وإلى هنا توقفت دماغي (فااااااااااااااصل ومفيش نواصل) أرجو أن أكون قد وفقت في توصيل المعلومة ، وإلى أن نلتقي أترككم في رعاية الله. كان معكم الحاجة أم محمد صاحبة الفطير من منتدى أوفيسنا تقبلوا تحياتي ودمتم بود
    1 point
  20. السلام عليكم أرجو أن يكون هذا هو طلبك تفضل توزيع متعدد5.rar
    1 point
  21. حل أخر بطريقة أخرى يتم وضع هذه المعادلة فى الخلية "B3 " وسحبها لأسفل بالقدر المطلوب =IF(A3="","",VLOOKUP(A3,$E$3:$G$22,3,TRUE)) وإذا أردت حذف الجدول الموجود فى الأعمدة " E-F-G " أى بدون أيه شروط سوى عمود البحث " A " فقط أستخدم الصيغة بالشكل التالى: =IF(A3="","",VLOOKUP(A3,{0,100,30;101,200,40;201,300,50;301,400,60;401,500,70;501,600,80;601,700,90;701,800,100;801,900,110;901,1000,120;1001,1100,130;1101,1200,140;1201,1300,150;1301,1400,160;1401,1500,170;1501,1600,180;1601,1700,190;1701,1800,200;1801,1900,210;1901,2000,220},3,TRUE)) تقبلوا تحياتى
    1 point
  22. معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة حضرتك انا اسف على التاخير انا كنت فقد الامل نظرا لضيق وقت حضرتك اشكرك على الاستجابة مرفق طية المرفقات المرفقات.rar معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة. رابط الموضوع الأصلى: http://www.egylovers.net/vb/showthread.php?p=673819#post673819 جميع الحقوق محفوظه © ايجى لفرز معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة. رابط الموضوع الأصلى: http://www.egylovers.net/vb/showthread.php?p=673819#post673819 جميع الحقوق محفوظه © ايجى لفرز معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة. رابط الموضوع الأصلى: http://www.egylovers.net/vb/showthread.php?p=673819#post673819 جميع الحقوق محفوظه © ايجى لفرز معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة. رابط الموضوع الأصلى: http://www.egylovers.net/vb/showthread.php?p=673819#post673819 جميع الحقوق محفوظه © ايجى لفرز معادلة النسخ اليا من الورد الى الاكسيل ارجو من حضرتكم شرح تلك المعادلة وهى كيفية استيراد بيانات معينة من ملف ورد الى جدول اكسيل اليا حيث اننى لدى اكثر من 100 ورقة ورد واريد ان اخذ بيانات معينة من الورد واحولها الى جدول وسوف ارفق لحضرتكم نموذج من الوردبه البيانات وجدول البيانات النسخ اليها اليا ولكننى ارجو من حضرتكم الشرح لازداد خبرة... رابط الموضوع الأصلى: http://www.egylovers.net/vb/showthread.php?p=673819#post673819 جميع الحقوق محفوظه © ايجى لفرز
    1 point
  23. الاخوة الكرام اليوم بمشيئة الله سنكمل عملية الترحيل وهنعرف ازاى نمنع المستخدم من تكرار ترحيل سند القبض ففى المره الاولى عند الضغط على زر الترحيل تظهر رساله " تم الترحيل بنجاح " وفى المره الثانية عند الضغط على زر الترحيل تظهر رسالة " تم الحفظ مسبقا" وذلك يتم باستخدم الحلقه التكرارية For next والتى قمنا بشرحها على الرابط التالى http://www.officena.net/ib/index.php?showtopic=58471&hl= اود منكم مراجعه سربعه على المشاركة رقم 48 من الصفحه 3 بالموضوع سنجد اننا وقفنا بالشرح عند هذا الكود Sub ترحيل() Application.ScreenUpdating = False If [G7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub With Sheet4 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row If [G6] = "نقدى" Then .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [G7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "G") = [d11] .Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[ End If If [G6] = "شيك" Then .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [G7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "i") = [d11] .Cells(Lr + 1, "j") = "=R[-1]C+RC[-1]-RC[-2]" End If End With End Sub سنجد ان اول سطر بالكود وهو Application.ScreenUpdating = False وهو يعنى كما قلنا من قبل تثبيت حركة الشاشه عند عمل الكود **************************************************************************** السطر الثانى من الكود وهو If [G7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub وهو يعنى اجبار المستخدم على ادخال كل بيانات سند القبض فعند عمل الكود يقوم بالتشييك على الخلايا المذكورة لو وجد بها خلية فارغه سيتوقف الكود ويظهر رساله الرجاء ادخال جميع بيانات السند قم الخروج من الكود Exit Sub ***************************************************************************** ثم السطر التالى وهو With Sheet4 وهو يعنى انى انا بقول للكود الاسطر التالية سيكون موجهه الى Sheet4 وهى تعنى الورقه المراد الترحيل البيانات اليها *************************************************************************** السطر التالى من الكود هو Lr = .Cells(.Rows.Count, "D").End(xlUp).Row وهو يعنى تعريف اخر خليه بها بيانات بالعمود D وقمنا بتسميتها LR ويمكن التغيير الى اى حرف او احرف حسب مزاجك ********************************************************************************** بعد كدا الكود بيقوم باختبار الخلية [G6] لو هى نقدى بيقوم بترحيل البيانات حسب الاسطر العمود النقدية ثم اغلاق End if // ولو هى شيك بيقوم بترحيل الاسطر الى عمود الشيكات ثم اغلاق End if المطلوب هنا قبل عملية الاختبار اذا كان نقدى او شيك ان يقوم الكود باختبار هل رقم السند اللى موجودبالخلية [G7] موجود بالعمود B يعنى تم ترحيله مسبقا أم لا يعنى عايزين نعمل كود يقوم بالذهاب الى العمود B بدءاً من الخلية B5 وحتى اخر خلية فى العمود فيها ارقام مكتوبه لو وجد فى اى خليه رقم السند اللى موجود بالخلية [G 7] يظهر لى رساله بان السند تم حفظه مسبقا ويطلع من الكود ازاى نعمل الكلام دا بالبرمجه هيكون من خلال For next For i = 5 To Lr If .Cells(i, "B") = [G7] Then MsgBox "هذا السند تم حفظة مسبقا ": Exit Sub Next عملنا حلقه تكرارية من الصف 5 بالعمود ب الى اخر خلية فى العمود بها ارقام طيب الحلقه دى هتلف على الخليه تشوف وتختبر فيها ايه هتشوف الرقم اللى موجود بالخلية [G7] موجود باى خلية منهم او لا لذالك استخدمنا IF [If .Cells(i, "B") = [G7 لو الخلية وهى Cells ( اى خلية يتم قرائتها باسم العمود ورقم الصف مثلا نقول A4 تكتب هكذا ("Cells(4, "A / رقم 4 هنا هو الصف ورقم 1 هنا هو العمود A طيب فى المثال بنتاعنا معروف العمود وهو B وغير معروف الصف الصف متغيير بالحلقه التكرارية لذالك عملنا حلقه For i = 5 To Lr و i ترمز للصف لذالك كتبنا [If .Cells(i, "B") = [G7 لو حصل الشرط ده يظهر رساله "هذا السند تم حفظة مسبقا " ويخرج من الكود ب Exit Sub وطبعا For دائما تقفل ب next وهيكون الكود بشكله النهائى كالتالى Sub ترحيل() Application.ScreenUpdating = False If [G7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub With Sheet4 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row For i = 5 To Lr If .Cells(i, "B") = [G7] Then MsgBox "هذا السند تم حفظه مسبقا ": Exit Sub Next If [G6] = "نقدى" Then .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [G7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "G") = [d11] .Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]" MsgBox "تم عملية الترحيل بنجاح" End If If [G6] = "شيك" ThenIf [G6] = "شيك" Then .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [G7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "i") = [d11] .Cells(Lr + 1, "j") = "=R[-1]C+RC[-1]-RC[-2]" MsgBox "تم عملية الترحيل بنجاح" End If End With Application.ScreenUpdating = True End Sub ارحو ان اكون وفقت بالشرح ياريت تجربوا عملى حتى تتضح لكم الامور بشكل افضل تقبلوا تحياتى
    1 point
  24. الاخوة الكرام بالمنتدى اليوم أن شاء الله سنكمل شرح دروس الترحيل كيفية عمل سريل تلقائى لسند لعمل سريل تلقائى يتم فى خطوتين الخطوة الاولى : هى ادراج المعادله التاليه فى الخلية C1 كما هو موضح بالصورة المرفقه =MAX(حركة الخزينة!B5:B100000)+1 المعادله دى هى معادله Max ايجاد اكبر قيمة فى العمود B بشيت حركة الخزينة 1 +( النطاق ثم ! كتابة اسم ورقة العمل المراد ايجاد اكبر قيمة فى العمود بداخلها ) max = سنلاحظ بعد كتابة اسم الورقه متبوعه ب علامه التعجب ! لمعرفة المزيد عن داله Max يرجى مراجعه الرابط التالى http://www.officena.net/ib/index.php?showtopic=58127#entry370483 أذا كان الاوفيس 2010 او 2013م سنستخدم هذا المعادله =MAX('حركة الخزينة'!B5:B100000)+1 هى نفس المعادله السابقه ولكن الزياده هنا هى هذه العلامه ( ' ) قبل اسم الورقه وبعدها ( وهذه العلامه تكتب بجعل اللغه انجلش ثم الضغط على حرف ط ) بصراحه ايه فرق صيغه المعادله من 2007 الى 2010 او 2013 صراحه مش عارف لو فى احد من الخبراء يفسرو لنا هذا نكون شاكرين نرجع للمثال بتاعنا طبعا الفايل المرفق للشرح فى اول مشاركة وهو خزينة تم تصميمه على 2013م لذالك سنستخدم المعادله الثانية فى الخلية c1 كما هو بالصورة النتيجة كما هى بالصورة عاليه 1 ( وبالطبع هى نتيجة صحيحة لان شيت حركة الخزينة العمود B لم يسجل اى سند لذالك النتيجة 1) الخطوة الثانية : جعل الخلية G7 =C1 كما هو مبين بالكود التالى نقوم بادراج مودويل جديد ولصق هذا الكود فيه Sub جديد() [G7] = [c1] [d8] = "" [d10] = "" [d11] = "" End Sub ثم الرجوع الى زر ايصال جديد الموجود بالسند وتعيين الماكرو علية كليك يمين على الزر ستظهر قائمة اختار منها تعيين الماكرو سيظهر لك شاشة اختار منها جديد وقم بالضغط على الزر وشوف النتيجة ستجد 1 لو سجلت سند ثم قمت بعملية الترحيل وضغط زر جديد ستجد رقم الايصال اصبح 2 وتم مسح البيانات بخانه التاريخ وخانه المستلم والمبلغ ولجعل شغلك اكثر احترافيه غير لون خلفيه الخلية C1 ولون الخط بها على نفس اللون حتى لا يظهر ما بداخل الخلية مرفق ملف للتجربة العملية ********* ملحوظه انا بستخدم بالشرح اسهل الطرق وايسرها ارجوا من الله ان اكون وفقت بالشرح ويستفيد منه الجميع تقبلوا منى وافر الاحترام والتقدير خزينة.zip
    1 point
  25. السلام عليكم بارك الله فيك وجازك كل الخير اخي الصقر الجريح عندي تعقيب بسيط على الموضوع ارجو ان تتقبله بصدر رحب لانه لاغاية لي الى اثراء الموضوع اولا عندما نعطل احد وضائف المصنف مثلا كود تثبيت الشاشة Application.ScreenUpdating = False من الافضل ارجاعه الى وظيفته الافتراضية عند نهاية الكود Application.ScreenUpdating = True ثانيا في كود معرفة اخر خلية تحوي بيانات في العمود بما انك ستتعامل مع الخلية التي تليه يكون من الافضل اضافة الواحد في الكود نفسه بدلا من تكرار العملية مع كل خلية سترحل لها البيانات lr = .Cells(.Rows.Count, "D").End(xlUp).Row + 1 ثالث هنا عملية الترحيل بسيطة وليس فيها الكثير من البيانات فرضا انه لدينا بيانات كثيرة سترحل سيكون من الافضل استخدام الحلاقات الدورانية لتنفيذ المطلوب لاكن في المثال السابق ليس من المستحسن استخدامها لان ترتيب البيانات المرحلة متخالف مع المرحل اليها انما سيربكنا استعمالها لذى افضل استخدام المصفوفات التي تتسم بالسرعة الفائقة في التنفيذ و اختزال الاسطر الكثيرة ليكون المثال السابق كالاتي Sub ترحيل() Application.ScreenUpdating = False With Sheet4 lr = .Cells(.Rows.Count, "D").End(xlUp).Row + 1 ' مصفوفة تحوي البيانات التي سترحل حسب ترتب الترحيل Dim Matrix: Matrix = Array([D8], [G7], "", [D10], "=R[-1]C+RC[2]-RC[1]", "", [d11]) 'كود الترحيل بستخدام المصفوفة و دالة Resize .Range("A" & lr).Resize(1, 7).Value = Matrix End With Application.ScreenUpdating = True End Sub في الاخير ارجو ان تكون فكرتي وصلت وان تستفيدو منها واكرر اعتذاري للاخ الصقر الجريح وارجو ان لا اكون قد تطاولت على موضوعه تحياتي للجميع
    1 point
  26. الاخوة الكرام اقدم لكم بقية لدرس الترحيل كيفية وضع شروط تجبر المستخدم على ادخال بيانات مما لا شك فيه ان سند القبض اللى بصورة التالية لابد من ادخال جميع البيانات اللى بالسند وهى المظلله باللون الاصفر رقم الايصال بالخلية [G7] تاريخ السند بالخلية [D8] الجهه التى تم القبض منها بالخلية [D10] المبلغ المقبوض بالخلية [D11] ان شاء الله اليوم بنتعرف كيف يمكن اجبار المستخدم على ادخال البيانات قبل ترحيلها فلا يعقل مثلا ان يقوم المستخدم بعدم كتابه تاريخ للسند ويترك الخلية فارغه بدون تاريخ ثم يقوم بالترحيل لازم اجبره على ادخال التاريخ اولا: اجبار المستخدم على ادخال رقم الايصال بالخلية [G7] هنستخدم السطر التالى بالكود If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub هذا السطر يتم اضافتة بعد هذا السطرمن الكود Application.ScreenUpdating = False ليصبح هكذا Sub ترحيل() Application.ScreenUpdating = False If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub With Sheet4 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row .Cells(Lr + 1, "A") = [D8] .Cells(Lr + 1, "B") = [g7] .Cells(Lr + 1, "D") = [D10] .Cells(Lr + 1, "G") = [d11] .Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]" End With End Sub تعالى بقى نشرح معنى هذا السطر If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub هذا السطر من الكود معناه ببساطه كدا ان لو الخلية [g7] فارغه اكتب رساله تظهر للمستخدم تنبهه بان الخلية فارغه ويجب ادخالها و اخرج من الكود ومتكملش الشىئ الذى تريد تنفيذه then الشرط المطلوب التحقق من وجوده if استخدمنا هنا IF وذالك لعمل شرط قبل عملية الترحيل وهى كما نعرف جميعا ان iF معناها لو then معناها تنفيذ الشرط الذى نريده كما اتفقنا من قبل هو عدم ترك الخلية [g7] فارغه اللى بيسجل بها رقم الايصال الكود هيقوم باختبار الشرط التالى "" = [if [g7 "" العلامه هذا بالكود تعنى فارغ ( فلو [g7] تساوى فارغ نفذ كذا كذا ) نفذ دى فى الكود هى Then وسيكون لونها بالكود ازرق هينفذ ايه بقى انا عايزة يظهر رساله وهى " الرجاء ادخال رقم الايصال" ونلاحظ انها مكتوبه بين علمتى تنصيص ( تكتب من خلال شيفت + حرف ط بالكيبور) وهينفذ ايه تانى غير الرساله هينفذ خروج من الكود ميكملش يعنى ودى بتكون exit sub : وبعدها كتابتها ستجد ان لونها اصبح ازرق لمتابعه شرح عن كتابة الرسائل فى لغة البرمجه يرجى مراجعه الرابط التالى ستجد شرح باستفاضه http://www.officena.net/ib/index.php?showtopic=57199&hl= ) ثانيا : عايزين نجبر المستخدم على ادخال التاريخ If [d8] = "" Then MsgBox "الرجاء ادخال تاريخ لسند القبض": Exit Sub هو نفس السطر السابق بس بنختبر الخليه [d8] فيها تاريخ ام لا ثالثا : اجبار المستخدم على ادخال الجهه التى تم الاستلام منها If [d10] = "" Then MsgBox "الرجاء ادخال اسم الشخص الذى تم الاستلام منه": Exit Sub رابعا: اجبار المستخدم على ادخال المبلغ المقبوض If [d11] = "" Then MsgBox "الرجاء ادخال المبلغ المقبوض": Exit Sub وهيكون الكود فى شكله النهائى كالتالى Sub ترحيل() Application.ScreenUpdating = False If [g7] = "" Then MsgBox "الرجاء ادخال رقم الايصال": Exit Sub If [d8] = "" Then MsgBox "الرجاء ادخال تاريخ لسند القبض": Exit Sub If [d10] = "" Then MsgBox "الرجاء ادخال اسم الشخص الذى تم الاستلام منه": Exit Sub If [d11] = "" Then MsgBox "الرجاء ادخال المبلغ المقبوض": Exit Sub With Sheet4 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [g7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "G") = [d11] .Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]" End With End Sub يعنى الكود قبل الترحيل هيعمل اربع اختبارات الاول هيمسك اول سطر بتاع رقم الايصال لو موجود ينتقل للسطر اللى بعده ولو مش موجود هبخرج من الكود ومش هيكمل وهكذا ما باقى الاسطر الين يتحقق من وجود بينات بالاربع خلايا ثم يقوم بعمليه الترحيل خامسا : هل يمكن عمليه الاختبار بسطر واحد بدلا من اربع اسطر نعم يمكن ذالك من خلال السطر التالى If [g7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub هنا تم استخدام داله OR وهى تعنى أو لو الخلية اللى بها رقم الايصال فارغه أو الخلية اللى بها التاريخ فارغه او الخلية اللى بها الجهه التى تم استلام المبلغ منها أو الخلية اللى بها المبلغ فارغه نفذ رساله ثم اخرج من الكود ومتكملش ويكون الكود بشكله النهائى كالتالى Sub ترحيل() Application.ScreenUpdating = False If [g7] = "" Or [d8] = "" Or [d10] = "" Or [d11] = "" Then MsgBox "الرجاء ادخال جميع بيانات السند": Exit Sub With Sheet4 Lr = .Cells(.Rows.Count, "D").End(xlUp).Row .Cells(Lr + 1, "A") = [d8] .Cells(Lr + 1, "B") = [g7] .Cells(Lr + 1, "D") = [d10] .Cells(Lr + 1, "G") = [d11] .Cells(Lr + 1, "E") = "=R[-1]C+RC[2]-RC[1]" End With End Sub وفى النهاية ارجوا ان اكون وفقت بالشرح واتمنى ان يستفيد منه الجميع تقبلوا منى وافر الاحترام والتقدير
    1 point
  27. بارك الله لك أخي الكريم عبد الله وإذا سمحت لي يمكننا زيادة سرعة البحث والتعامل مع الملف بهذه التعديلات البسيطة بانتظار رأيك ورأي الإخوة الكرام أعضاء أوفيسنا ملحوظة: تم حذف جميع الأزرار واستبدالها بضغطات تم تلوين الآية في الشيت نموذج بحث سريع في القرآن الكريم1.rar
    1 point
  28. لاحظى هذا المرفق ارجو ان اكون شرحت فيه المطلوب مشكله فى دالة RANK.rar
    1 point
  29. وإياك اخي الحبيب في وحدة نمطية عامة نلصق الجملة البرمجية التالية : Public Function qsplit(FullName As String, i As Integer) On Error Resume Next qsplit = Split(FullName, " ")(i) End Function لاحظ اننا انشأنا دالة جديدة بناء على الدالة الاصلية وجعلنا لها اسما قريبا من الدالة الاصلية حتى يتم التعرف عليها وعلى عملها من اول نظرة ولاحظ ايضا ما حدث لوسائط الدالة الاصلية وترتيبها حيث سيتم توظيف الدالة الجديدة داخل الاستعلام على النحو التالي : name1 : qsplit(FullName; 0) name2 : qsplit(FullName; 1) name3 : qsplit(FullName; 2) name4 : qsplit(FullName; 3) وفي المثال تطبيق للشرح والمقال : تجزئة النص.rar
    1 point
  30. وجرب هذا الاستعلام لتستغني عن التقسيمة و توجد الاسم الاخير ايا كان موقعه SELECT TabNames.ID, TabNames.FullName,right(fullname,len(fullname)-instrrev(fullname," ")) from tabnames تحياتي
    1 point
  31. بسم الله الرحمن الرحيم طريقة عمل فورم بحث واظهار النتائج في ليست بوكس وتعديل النتائج بتكستات بوكس !! خطوة خطوة (((( الدرس الاول - الجزء الثاني )))) مرفق ملف اكسيل به الفورم والمثال الذي سنعمل عليه في الدروس القادمة في المساركة السابقة اليكم اولا رابط تحميل مباشر للملف الفيديو ( رابط خارجي ) والتالي شرح بفيديو مباشر من خلال هذا الصرح العملاق ( ويمكنكم ايضا تحميله من هنا ) جزاكم الله خيرا
    1 point
  32. السلام عليكم ليس بعد كلام الأساتذة خبور خير والحسامي أي كلام فقط أيضا للإثراء مرفق حل بدون أكواد بإستخدام الدالة Indirect Book2_Tareq.rar
    1 point
×
×
  • اضف...

Important Information