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

Foksh

الخبراء
  • Posts

    5135
  • تاريخ الانضمام

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

  • Days Won

    259

Foksh last won the day on أكتوبر 14

Foksh had the most liked content!

السمعه بالموقع

3003 Excellent

عن العضو Foksh

  • تاريخ الميلاد 07/02/1982

البيانات الشخصية

  • Gender (Ar)
    ذكر
  • Job Title
    فني صيانة موبايل وكمبيوتر
  • البلد
    الأردن ♥
  • الإهتمامات
    برمجة وصيانة الموبايل والكمبيوتر

اخر الزوار

13865 زياره للملف الشخصي
  1. يا عيني يا عيني ما هذا الجمال ، والإبداع أخي منتصر بارك الله فيك على هذه المشاركة الجميلة فعلاً والتي يحتاجها الكثير فعلاً .. تعقيباً على كلام أخي موسى ، والذي لا ينقص من روعة العمل شيئاً ، لاحظت ما يلي يما يتعلق بالنقطة الثانية :- استخدام تعريف المتغير Private lngStep As Single في بداية النموذج الفرعي sbfSpinButtons . حيث أن نوع البيانات Single ( وحتى Double ) يعتمد على نظام الفاصلة العائمة الثنائي . وهنا الكسور العشرية التي تبدو بسيطة مثل 0.1 أو 0.05 لا يمكن تمثيلها بشكل دقيق تماماً بالنظام الثنائي ؛ فيتم تخزينها بقيمة تقريبية تزيد قليلاً عن القيمة الأصلية . ثم يأتي شرط فحص الحد الأقصى في الدالة Up ، حيث varMaxValue = 1 ، في الجملة :- If (ctlTxtBox.Value + lngStep) <= varMaxValue Then وفرضاً ، الشرط يختبر هل 1.00000001490116 <= 1 ؟؟؟ والنتيجة قطعاً هي لا = False . بالتالي يرفض الكود الزيادة ، ويتجمد الرقم عند 90% (0.9) . ونفس الأمر يتكرر مع خطوة 5% بعد 20 نقرة حيث يتجاوز المجموع الرقم 1 بجزء متناهي الصغر ، فيتوقف عند 95% . ونفس المشكلة تحدث أيضاً عند النزول Down . عندما يصل إلى 10% ثم ينقص 0.1 ، يصبح الناتج تقريباً -0.0000000149 ( أقل من الصفر ) ، فيتوقف عند 10% ولا يصل إلى 0% . لذا ، خطر ببالي ومن باب التجربة ما يلي ، على الدالتين Up و Down ، مع تغيير نوع المتغير طبعاً ليصبح الضع كالتالي :- نوع المتغير في تعريفه من Single إلى Double . الدالتين تصبحان :- Private Sub Up() Dim curVal As Variant Dim stpVal As Variant Dim nextVal As Variant stpVal = CDec(lngStep) If Not ctlTxtBox Is Nothing Then ' الوضع الأول: مع مربع النص If IsNumeric(ctlTxtBox.Value) Then curVal = CDec(ctlTxtBox.Value) nextVal = curVal + stpVal If Not IsEmpty(varMaxValue) Then If nextVal <= CDec(varMaxValue) Then ctlTxtBox.Value = CDbl(nextVal) ElseIf curVal < CDec(varMaxValue) Then ' إذا تجاوزت الخطوة الحد الأقصى وكان الرقم أقل منه (مثل 99% مع خطوة 3%) نضبطه على 100% ctlTxtBox.Value = varMaxValue End If Else ctlTxtBox.Value = CDbl(nextVal) End If End If Else ' الوضع الثاني: مع متغير وحدث curVal = CDec(dblValue) nextVal = curVal + stpVal If Not IsEmpty(varMaxValue) Then If nextVal <= CDec(varMaxValue) Then dblValue = CDbl(nextVal) ElseIf curVal < CDec(varMaxValue) Then dblValue = CDbl(varMaxValue) Else Exit Sub End If Else dblValue = CDbl(nextVal) End If RaiseEvent ValueChanged(dblValue) End If End Sub Private Sub Down() Dim curVal As Variant Dim stpVal As Variant Dim nextVal As Variant stpVal = CDec(lngStep) If Not ctlTxtBox Is Nothing Then ' الوضع الأول: مع مربع النص If IsNumeric(ctlTxtBox.Value) Then curVal = CDec(ctlTxtBox.Value) nextVal = curVal - stpVal If Not IsEmpty(varMinValue) Then If nextVal >= CDec(varMinValue) Then ctlTxtBox.Value = CDbl(nextVal) ElseIf curVal > CDec(varMinValue) Then ' إذا نزلت الخطوة عن الحد الأدنى وكان الرقم أكبر منه نضبطه على 0% ctlTxtBox.Value = varMinValue End If Else ctlTxtBox.Value = CDbl(nextVal) End If End If Else ' الوضع الثاني: مع متغير وحدث curVal = CDec(dblValue) nextVal = curVal - stpVal If Not IsEmpty(varMinValue) Then If nextVal >= CDec(varMinValue) Then dblValue = CDbl(nextVal) ElseIf curVal > CDec(varMinValue) Then dblValue = CDbl(varMinValue) Else Exit Sub End If Else dblValue = CDbl(nextVal) End If RaiseEvent ValueChanged(dblValue) End If End Sub
  2. جزاك الله خيراً اخي @AMINYOUSIF .. هدية مقبولة منك
  3. وعليكم السلام ورحمة الله وبركاته .. رغم أن طبيعة الطلب غير مفهومة أخي الكريم !!! ولكن !! على العموم ، ومشاركة مع أخي الأستاذ @بن علية حاجي ، جرب هذه المعادلة في الورقة Sheet1 في الخلية I2 ، واسحب للنهاية حسب حاجتك للتطبيق على الكل :- =IFERROR(VLOOKUP(A2&"", source!$A:$D, 4, 0), VLOOKUP(A2*1, source!$A:$D, 4, 0)) السبب على الأغلب يكمن في قاعدة أساسية في إكسل تسمى اختلاف نوع البيانات - Data Type Mismatch أما اذا كان سؤالك ، كيف تعمل الدالة السابقة ؟ فهي تقوم بما يلي :- تبحث أولاً مع تحويل القيمة إلى نص في (A2&"") إذا لم تجدها ، تقوم تلقائياً بالبحث بعد تحويل القيمة إلى رقم (A2*1) تضمن لك الحصول على النتيجة الصحيحة في كلتا الحالتين على أي جهاز كمبيوتر أو إصدار إكسل جرب وأخبرنا بالنتيجة
  4. العفو يا صديقي ...
  5. وعليكم السلام ورحمة الله وبركاته .. جرب المعادلة التالية في الخلية N6 :- =IF(G6<50, "ضعيف", IF(G6<60, "دون المتوسط", IF(G6<75, "متوسط", IF(G6<90, "فوق المتوسط", IF(G6<=100, "كفؤ", "درجة غير صحيحة"))))) إذا لم تعمل معك ، فالسبب عادةً الفاصلة المنقوطة ، لذا جرب التالية إحتياطاً :- =IF(G6<50; "ضعيف"; IF(G6<60; "دون المتوسط"; IF(G6<75; "متوسط"; IF(G6<90; "فوق المتوسط"; IF(G6<=100; "كفؤ"; "درجة غير صحيحة")))))
  6. لكم الأجر والثواب .. شكراً لكم مهندس جمال على مروركم وإطرائكم
  7. وعليكم السلام ورحمة الله وبركاته .. أبدعت بهذه المشاركة أخي أحمد ، وجزاكم الله خيراً لمشاركتكم الأداة مع أنها وكما أوضحتم بأنها 30 يوماً , ولكني سأنصحك بتجربة الأداة الأكثر تطوراً والمفتوحة المصدر حتى ، وبما أنك من المهتمين بهذه الأدوات الجميلة ، وهي أداة Rubberduck في هذه التفاصيل :- 1. تنسيق ومحاذاة الكود :- تقوم بإعادة محاذاة وتنسيق الكود بالكامل بضغطة زر واحدة ( للإجراء الحالي المحدد ، الموديول ، أو كامل المشروع ) . تحتوي على إعدادات متقدمة لتخصيص المسافات البادئة ، طريقة ترتيب الجمل الشرطية ، وسلوك الأقواس والتعليقات . 2. فحص وتدقيق الكود الذكي :- تحتوي الأداة على محلل ذكي يكتشف أكثر من 100 نوع من الأخطاء ونقاط الضعف البرمجية تلقائياً أثناء كتابة الكود ، مثل :- المتغيرات غير المستخدمة ( Unused Variables ) أو الأكواد الميتة ( Dead Code ) . المتغيرات التي لم يُحدد نوع بياناتها صراحة وتُركت كنوع Variant افتراضياً . غياب عبارة Option Explicit في الموديولات . نسيان إغلاق أو تفريغ كائنات الذاكرة ( Set rs = Nothing ) . توفر ميزة الإصلاح السريع ( Quick Fix ) لتصحيح المشكلة بنقرة واحدة دون كتابة يدوية . والعديد من المميزات التي قد تكتشفها عند مراجعتك هذا الرابط للتحميل والتفاصيل .
  8. أهلاً بعودتك أخي @kkhalifa1960 ، وحمداً لله على سلامتكم
  9. وعليكم السلام ورحمة الله وبركاته .. إذا كان قارئ الـ NFC يعمل بوضع Keyboard Emulation ، أي أنه يرسل البيانات كما لو أنك كتبتها بلوحة المفاتيح ، فالإجابة هي نعم يمكن تنفيذ الفكرة دون الحاجة إلى مكتبات خارجية معقدة . وكأننا نتعامل مع قارئ الباركود أو الـ QR تماماً ؛ لأنني قد مررت بهذه التجربة مسبقاً . ابحث عن قارئ يدعم هذه المواصفات مجتمعة :- USB HID Keyboard Emulation . قراءة محتوى NDEF Text من البطاقة ، وليس UID فقط . إمكانية إرسال مفتاح Enter بعد القراءة . ليسهل عيك وضع الحدث داخل مربع نص كلمة المرور في الحدث بعد التحديث . بمعنى آخر ، هو القارئ الذي يعمل كلوحة مفاتيح افتراضية . وطبعاً ليست كل قارئات USB NFC من هذا النوع . اقرأ المقال التالي للتوضيح أكثر . أتمنى أن تكون الإجابة قد شملت ما تفكر به أخي الكريم .
  10. العفو أخي الكريم .. على الرحب والسعة
  11. هذه الجملة وحدها شرف لي أخي منتصر ، أن أقف بجانبكم وبجانب نخبة من الأساتذة هنا التي لكم ولها أعمال تستحق رفع القبعات وبجدارة ..
  12. بارك الله بكم أبا المعتصم على ما دعيتم ... ولكم الأجر والثواب إن شاء الله هو بعينه المنطق اللي انت بتتكلم عنه 😅 .. نعم هنا كان الهدف في الفكرة الأولى أن تقوم الأداة فعلاً بتقديم نسخة Accde ، واسترجاعها عند الحاجة لكثرة ما مررنا به من مشاكل وقعت أنا أولكم - أخوكم الصغير - بها سابقاً بأنني لم أجد نسخة العميل التي تم ارساله لها ولكن مفتوحة المصدر .. ولهذا توجهت لهذه الفكرة . فإن كان في خاطركم أفكار فلا أمانع أبداً أن أسمع أفكاركم ومقترحاتكم التطويرية .. الأمور الدقيقة هذه تلفت انتباهكم ، وفعلاً التسميات موجودة داخل مربعات النص اذا كانت فارغة ، ولكن بدون ليبلات 😁 يا عيني عليك .. بارك الله فيكم أخي احمد على مشاركتكم التجربة .. . سمعت صوتك وأنا أقرأ ردك هذا أخي منتصر 👀 .. مين قال هذا الكلام 😅 . على العكس يهمني رأيكم أخي منتصر
×
×
  • اضف...

Important Information