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

AbuuAhmed

الخبراء
  • Posts

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

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

  • Days Won

    17

كل منشورات العضو AbuuAhmed

  1. فحص المفتاح وتشغيله عندما يكون لا يعمل: Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Sub NumLockCheck() If GetKeyState(&H90) = 0 Then mySendKeys "{NUMLOCK}" End Sub
  2. لا يوجد ما تطبقه أخي ، البرنامج سيتكيف آليا مع عدد الورثة. فقط زد أو انقص في جدول الورثة. نسخة معدلة لتفادي تجاوز مساحة الكائنات عرض الشاشة.
  3. بخبرة المحاسب 🙂 استخدام الأرقام العشرية للحسابات لتحصل على نتائج دقيقة وعادلة ، أما مسألة سنين وشهور وأيام هذه اتركها فقط للسلوى. عندي دالة سأبحث عنها تستطيع فرز الأيام للسنين البسيطة والسنين الكبيسة للحصول على نتائج دقيقة جدا. لم أنزل مثال الأخ خليفة ، سأنزله وأطلع عليه ، إن شاء الله يفتح معي.
  4. حاول تبديل السطر البرمجي في مشاركتي السابقة إلى هذا السطر: HeirWidth = (Me.WindowWidth - 3112) / Heirs
  5. بإذن الله سوف تحل كل المشاكل. هل قمت بأي تعديل على التصميم؟ عند ظهور رسالة الخطأ انقر زر Debug ثم قم بأخذ لقطة من الشاشة حاليا وأنا أعمل لحل هذه المشكلة قم باللعب في رقم الـ 20000 في هذا السطر وذلك بإنقاصه 1000 مع كل محاولة: HeirWidth = 20000 / Heirs ملاحظة أقل عدد للأعمدة 10 هو للحفاظ على شكل/مظهر النموذح وإلا بالإمكان أن أجعله عمودا واحدا فقط.
  6. نسخة أخرى بعد تعديل على حدث التراجع. أجر وعافية أخي العزيز ، شافاك الله وعافاك وأرجعك لنا سالما معافى.
  7. ارفع مثالك عزيزي وستجد العون من الجميع إن شاء الله.
  8. أبشر عزيزي تم عمل مراجعة شاملة وإن شاء الله الأمور كلها تحت السيطرة ملاحظات: - لا تستخدم الإستعلام كمصدر للنموذج ، لا حاجة له. - لا داعي للكتابة في حدث بعد التحديث لصناديق المبالغ الموزعة فالبرنامج يقوم بها آليا. - تم تبديل معظم مسميات الصناديق لتسهيل السيطرة والتعديل. - يتكيف مع عدد الورثة آليا على أن لا يتعدى الـ 50 ولا تقل أعمدة الورثة عن 10 وسيتم التعمية على الأعمدة الزائدة عندما يقل عدد الورثة عن 10 - سيتم حساب عرض الأعمدة حسب عددها آليا. - تم تبديل أسماء الجداول والنموذج والوحدات النمطية وحذف الاستعلام. - وددت تبديل أسماء حقول الجداول ولكن تركتها كما هي حتى لا تتسبب لك في مشاكل .. وإذا أردت تبديلها تشاور مع الزملاء. - البرنامج يحتاج إلى تجارب قوية بزيادة عدد الورثة مع كل تحربة. موفقين.
  9. الموضوع السابق:
  10. حركوا ساكن ، لماذا الصمت؟!! توجد مشكلة في الإجراءات السابقة لإجراء التوسيط ، لماذا لا تراجعونها وتحاولون حلها؟ إجراء التوسيط يعمل بكل كفاءة، فقط أضفت سطرا واحدا لحل جزئية سببها الإجراءات السابقة ليتفادى الصناديق التي عرضها صفر ليصبح كالتالي: For Each Ctl In Me.Controls With Ctl If .Width <> 0 Then If .Left < minX Then minX = .Left If .Left + .Width > maxX Then maxX = .Left + .Width End If End With Next Ctl هذه آخر مشاركة لي في هذا الموضوع.
  11. سبق وأن شاركت في موضوع لك سابق لنفس المشكلة ، ثم اختفيت دون أن تذكر النتيجة. لا بأس يا أخي ، لتختصر الوقت والجهود ارفع مثالا به مشكلتك وسنقوم بحلها وتوضيح السبب.
  12. شكرا لك أستاذ موسى. عطلت السطر GenerateDate مع الإعتذار لأنه يتسبب في تعطيل كودي للتوسيط ، لم أفهم السبب. بدلت في كودي الأخير Width إلى WindowWidth AA-3-4_06 (2007).accdb
  13. فضلا وليس أمرا ، حول لي مثالك إلى إصدار 2007
  14. وهذه فكرة ثانية للتجربة أضف زر لإعادة التوسيط وسمه cmdRecenter ونشط الحدث عند النقر وسيكون الكود بهذا الشكل: Private Sub cmdRecenter_Click() Dim Ctl As Control Dim minX As Integer, maxX As Integer, Gap As Integer minX = Me.WindowWidth maxX = 0 For Each Ctl In Me.Controls With Ctl If .Left < minX Then minX = .Left If .Left + .Width > maxX Then maxX = .Left + .Width End With Next Ctl Gap = (Me.WindowWidth - (maxX - minX)) / 2 Gap = Gap - minX If Gap <> minX Then For Each Ctl In Me.Controls With Ctl .Left = .Left + Gap End With Next Ctl End If End Sub جربوا وخبرونا.
  15. كالعادة لا أستطيع فتح قاعدة البيانات. في بالي فكرة جربوها ، أن يكون نموذج الفاتورة الرئيس "نموذجا فرعيا" لنموذج رئيسي آخر عبارة عن حاوية/فريم فقط. ففي النموذج الرئيس الجديد نقوم بالتحكم فيه ليلائم الشاشة وفي نموذج الفاتورة الذي أصبح نموذجا فرعيا نقوم بتوسيطه بناء على النموذج الأب/الرئيس الجديد.
  16. عزيزي ، من المعضلات توضيح الواضحات 🙂 عملية التراجع ليست جديدة والتنبيه لها أعتقد قليل من يستخدمها ولكن وددت أن أنبه إلى أوامر "تخريب التراجع" إن صح التعبير ، فخلاصة الموضوع: يمكنكم التراجع بعد تجنب أوامر الحفظ مع ضرورة التنبيه قبل التراجع فقد تقومون بالتراجع في لحظة غفلة.
  17. دائما ينصح بتنبه المستخدم عند حذف أي بيانات محفوظة لخطورة هذه العملية فبعد الحذف لا يمكن إعادة البيانات إلا بإدخالها مرة أخرى. وكذلك التراجع فهو يشبه عملية الحذف فقد يقوم المستخدم بإدخال أو تعديل بيانات ثم في غفلة يضغط على زر "هروب" ويفقد كل ما أدخله قبل حفظه ، لذلك أرى كذلك أن ينبه المستخدم بهذا الإجراء كما في عملية الحذف تماما. بالطبع لو كان السجل عبارة عن حقول قليلة وبيانات لا تؤثر في معلومة حسابية فعملية التراجع لا تشكل هاجسا ولكن في مثل هذا المثال المرفوع وهو لأحد أعضاء المنتدى حيث يحتوي السجل على 60 حقلا تقريبا وكلها عبارة عن أرقام تؤثر في المجاميع وفي العمليات المحاسبية فلا بد من التنبيه والتحذير حتى لا يضطر المستخدم من عملية الإدخال/التعبئة لستين حقلا من جديد. وطبعا التراجع عن الحفط هذه ميزة في الأكسس وللاستفادة منها لا بد من تجنب بعض الأوامر التي تقوم بحفظ السجل عند استعمالها في الأكواد وما يحضرني منها الآن: DoCmd.Save Me.Requery Me.Refresh Me.Recalc جربوا عملية التراجع باستخدام زر هروب Esc موفقين مثال_على_التنبيه_قبل_التراجع_01.accdb
  18. Function UpdateMe() Dim DayNo As Byte, RowTotal As Integer Dim cDay As Control With Screen.ActiveControl If .ControlSource Like "Day*" Then DayNo = Mid(.ControlSource, 4) If DayNo >= 1 And DayNo <= 50 Then Set cDay = Me("Day" & DayNo) Me("Sum" & DayNo) = DSum("Day" & DayNo, "table_BAIN", "ID_Time<>" & Me.ID_Time) + cDay For DayNo = 1 To 50 '------------------------------------------------ If Me("s" & DayNo) = Me("Sum" & DayNo) Then Me("D" & DayNo).Caption = DayNo Me("D" & DayNo).BackColor = RGB(255, 64, 61) Me("DDDD" & DayNo).BackColor = RGB(255, 64, 61) Me("Day" & DayNo).BackColor = RGB(255, 64, 61) Me("Sum" & DayNo).BackColor = RGB(255, 37, 92) Me("S" & DayNo).BackColor = RGB(255, 37, 92) Me("s" & DayNo).ForeColor = RGB(255, 255, 255) Me("D" & DayNo).ForeColor = RGB(255, 255, 255) Me("DDDD" & DayNo).ForeColor = RGB(255, 255, 255) Me("Day" & DayNo).ForeColor = RGB(255, 255, 255) Me("Sum" & DayNo).ForeColor = RGB(255, 255, 255) End If '------------------------------------------------ RowTotal = RowTotal + Nz(Me("Day" & DayNo), 0) Next DayNo Me.total = RowTotal Set cDay = Nothing End If End If End With End Function يفترض أن تعديلك يعمل بشكل صحيح بشرط أن أن قيمة Me("s" & DayNo) تكون صحيحة. في هذا الكود قمت باختصار هذا السطر If Me("s" & DayNo) = DSum("Day" & DayNo, "table_BAIN", "ID_Time<>" & Me.ID_Time) + cDay Then فقط.
  19. قد يكون الدمار بدون ركام ، كإنسان فقد عقله ، أو مات دماغيا. 🙂 أتمنى أن تطلع على المثال فقد صممت له شفرة بها أكثر من فكرة جديدة لأول مرة أقوم بها. بعض الأمثلة وعند تعدد المساهمين في بنائه وبدون "مشرف" أو مهندس بناء فهو شبه خرابة ، فهو يعمل ولكن بدون تجانس ، وأخطاؤه كثيرة. على كل حال وللأسف لا يمكنني الاطلاع على هذا المثال ولكني سأقوم بالتعديل على مثالي ورفع الكود هنا ، ولا تعتبره تعديلا على عمل أخي أبو خليل ، التعديل سوف يكون في دالتي.
  20. إذا لم تحيل @ابوخليل للمثال الذي عملت عليه أنا ليفهم الكود ووظيفته وحيثياته فالأمر سيكون بناء كود جديد على دمار كود سابق. ما عمله أبو خليل هو تدمير لما عملته أنا ، كما يرجى ملاحظة تجنب استخدام أي أمر يقوم بحفظ السجل الحالي مثل (Requery, Refresh, Save) حتى يمكنك التراجع عن التعديلات قبل الحفظ. في المثال الذي قمت أنا بالتعديل عليه فيه اختصار لتكرار كود بعد التحديث 50 مرة وبه ميزة عمل المجاميع بدون حفظ السحل الحالي لتمكين المستخدم من التراجع عند الحاجة وكذلك معالجة المجاميع من جديد عند التراجع.
  21. القسط الحالي = القسط السابق × 110%
  22. المثال بعد التعديل تقطيع الرقم القومى إلى أعمدة_01.xlsx
  23. لقد لاحظت عند الضغط على زر يسار يذهب التركيز يمين وكذلك العكس ، فهذا لتصحيح التركيز عملت لك تعديلات عدة منها تحديث المجاميع من جديد عندما تقوم بالتراجع عند تعديلات الحقل. المثال_03.accdb
  24. طريقة أفضل بكثير من سابقتها، ولكنها مشروطة بعدم استخدامك لحدث بعد التحديث After Update المثال_02.accdb
×
×
  • اضف...

Important Information