بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
نجوم المشاركات
Popular Content
Showing content with the highest reputation on 10/25/26 in مشاركات
-
اعرض الملف أداة إنشاء زري التدوير SpinButtons المخصصة {سلسلة الأدوات المساعدة المخصصة} أقدم لكم اليوم أداة جميلة وهي أداة تقوم بنفس الوظيفة التي يقوم بها أحد عناصر تحكم ActiveX وهو عنصر التحكم SpinButton ولكنها تتميز عنه في أنها تضيف إمكانية القيام بنفس العمل ولكن عن طريق لوحة المفاتيح وأيضا التحقق من صحة البيانات بالتالي فإذا كان عنصر تحكم SpinButton يخدم المستخدم الذي يفضل العمل بإستخدام الماوس فإن الأداة ستخدم جميع أنواع المستخدمين + المطورين إستخدام الأداة سهل وتم توضيح كل شيئ في الملف المرفق بإسم النسخة التوضيحية (أرجو قراءة كل التعليمات والملاحظات والتعليقات المرفقة بالكود لإنها توضح كل ما تريدون معرفته) أرجو أن تنال الأداة إعجابكم وفي إنتظار أي أسئلة أو ملاحظات تحياتي صاحب الملف منتصر الانسي تمت الاضافه 10/24/26 الاقسام قسم الأكسيس2 points
-
في البداية أشكركما على كلامكما المحفز الذي يدفعني لتقديم أفضل مايمكنني تقديمه أولاً فيما يخص ملاحظات الأخ @Moosak الوضع يختلف بين المثال 1 و المثال 2 ففي المثال 1 ولأنه يتم التعامل مع قيمة مربع النص بواسطة الأداة فقد قمت بتعديل الكود لتجاوز هذه المشكلة (إن شاء الله تكون ضبطت 😅) ولكن في المثال الثاني ولأن الأداة تتعامل مع قيمة متغير فنحن سنكون بحاجة لإضافة تعليمات برمجية للقيام بالتحقق من صحة البيانات أولآ ثم تعيين القيمة للمتغير وهذه التعليمات قد تختلف بإختلاف كل حالة لذا فأنا افضل ان لا أشملها ضمن الأمثلة حتى لايعتقد البعض بأنها من ضمن شروط عمل الأداة ولكني قمت بإضافتها لتتضح الفكرة وطالما ذكرنا هنا سبب إضافتها فهذا يفترض به إزالة أي لبس أما الملاحظة الثانية فالحقيقة أن ما حصل معي هو العكس فالمثال الأول كان يصل الى 99٪ فقط والثاني كان يصل الى 100٪ 😚 (لم أنتبه لهذا الخطأ إلا بعد ملاحظتك ) ولكن والحمدلله فقد قام الأخ @Foksh مشكورآ بتوضيح سبب المشكلة لا بل وجاء بالحل ايضا وهذا ليس مستغربا منه فله جزيل الشكر عموما قمت بإعادة رفع الأداة بعد إجراء التعديلات المطلوبة وأرجو أن يكون قد تم إصلاح الملاحظتين دون الوقوع في خطأ لم يكن في الحسبان الله يستر 😅 أرجو تجربة النسخة الجديدة وإبداء أي ملاحظات أخرى مع خالص تحياتي لكم2 points
-
أخي الكريم دائماً ما ننصح الأعضاء بالتقيد بقواعد تسمية الكائنات في قاعدة بيانات أكسس وأول وأهم قاعدة هي عدم إستخدام الأحرف العربية وثاني أهم قاعدة أن لا تتضمن مسافات وأنت ماشاء الله عليك لم تتقيد بأي منها لذا أنصحك بقراءة المشاركات التي تكلمت عن هذه الجزئية لأهميتها عموما كمساهمة مني في حل مشكلتك قمت بوضع حل سيتطلب منك إضافة نموذج سيتم فتحه عندما تريد أن تضيف أمر تسليم جديد ومنه سيتم التحقق من الشروط فإذا لم يسبق إصدار أمر تسليم للجهة في نفس التاريخ فسيتم إضافة أمر التسليم مباشرة أما إذا سبق أن تم الإصدار فسيتم تخيير المستخدم إما للإضافة أو للتراجع أما السلع فبمجرد أن يجد أنه سبق إدخال نفس السلعة في نفس الأمر سيتم تجهلها وحذف السجل أرجو أن تكون هذه هي التعديلات المطلوبة تحياتي مشروع مخازن 2026.rar1 point
-
يا عيني يا عيني ما هذا الجمال ، والإبداع أخي منتصر بارك الله فيك على هذه المشاركة الجميلة فعلاً والتي يحتاجها الكثير فعلاً .. تعقيباً على كلام أخي موسى ، والذي لا ينقص من روعة العمل شيئاً ، لاحظت ما يلي يما يتعلق بالنقطة الثانية :- استخدام تعريف المتغير 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 Sub1 point
-
1 point
-
1 point
-
1 point
-
وعليكم السلام-يمكنك استخدام هذا الكود Sub RmDupsU() Dim U As Range, N As Long, i As Long, wf As WorksheetFunction Dim rUP As Range Set U = Range("A:A") Set wf = Application.WorksheetFunction N = Cells(Rows.Count, "A").End(xlUp).Row For i = N To 2 Step -1 Set rUP = Range(Cells(i - 1, "A"), Cells(1, "A")) If wf.CountIf(rUP, Cells(i, "A").Value) > 0 Then Cells(i, "A").Clear Next i End Sub Duplicate Clear Contents.xlsm1 point
-
وعليكم السلام -يمكنك استخدام هذه المعادلة لإيجاد عدد العمليات =COUNTIFS(C:C,$K$2,D:D,$J$2,E:E,$I$2,F:F,$I5) ولإيجاد اجمالى المبلغ ... يمكنك استخدام هذه المعادلة =SUMIFS(B:B,C:C,$K$2,D:D,$J$2,E:E,$I$2,F:F,$I5) TQ1.xlsx1 point
-
1 point
-
أحسنت استاذ جعفر ... كود ممتاز جزاك الله كل خير وأحسن الله اليك1 point
-
وعليكم السلام-دائماً وأبداً لابد من تدعيم اى مشاركة بملف موضح فيه المطلوب بكل دقة...فيمكنك استخراج الرقم 2018 بالمعادلة التالية =LEFT(AD1,LEN(AD1)-FIND("-",AD1)) أما 2019 بالمعادلة التالية =RIGHT(AD1,LEN(AD1)-FIND("-",AD1))1 point
-
الأمر بسيط جداً تفضل ... معادلة بالتأكيد ممتازرة بارك الله فيك استاذ محمد وأكرمك الله 1235.xlsx1 point
-
تفضل يمكنك استخدام هذه المعادلة (Ctrl+Shift+Enter) =IFERROR(INDEX($C$3:$C$40,SMALL(IF(($C$3:$C$40<=$I$3)*($C$3:$C$40>=$I$2)*($B$3:$B$40=$K$2),MATCH(ROW($C$3:$C$40),ROW($C$3:$C$40)),""),ROW(A1)),COLUMN(A1)),"") Item Card1.xlsx1 point
-
1 point
-
1 point
-
1 point
-
شكراً جزيلاً لهذا المجهود وجزاك الله خير الثواب1 point
-
وعليكم السلام .دائماً وأبداً ننبه كثيراً على عدم دمج الخلايا لسهولة التعامل مع ملف الإكسيل ,,, تــم الغاء دمج الخلايا لحسن عمل المعادلات وتم وضع كود للطباعة نموذج ادخال البيانات1.xlsm1 point