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

Foksh

أوفيسنا
  • Posts

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

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

  • Days Won

    167

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

  1. الإجابة من طرفي ستكون نفس الإجابة في الموضوع التالي :-
  2. وعليكم السلام ورحمة الله وبركاته ,, لتعدد طلبك في أكثر من موضوع ، سأحاول شرح عدم إيجادك لأي رد في مشاركاتك بخصوص هذا الموضوع . أولا أخي الكريم وأنا أحد الأشخاص الذين قد قرأت الموضوع وللأمانة لم أفهم المطلوب . حيث أن المعطيات والمطلوب غير مفهومين بشكل واضح . ثانياً وأعتقد أنه ذو أهمية كبيرة ، وهي أن أسماء الحقول باللغة العربية ومعظمها بالأنجليزية .... إلخ . أضف الى ذلك طريقتك في بناء الأساسيات ( الجداول ) تحتاج لإعادة ترتيب وتعديل . لذا نرجو منك تصويب ما تستطيع ، وشرح الفكرة والمطلوب بشكل أكثر إيضاحاً . شكراً لك رحابة صدرك في استيعابي وأخذي بروحكم الكريمة
  3. وبارك الله بكم أخي الكريم ،، هو متاح للجميع دون استئذان ، وصدقة جارية عن روح والدي رحمه الله ,, فدعائكم له بالرحمة أكبر مكافأة .
  4. وعليكم السلااااااام ورحمة الله وبركاته .. يا هلا بالأفكار النيرة ، والإبداعات المثيرة . تحفة فنية جمية منسوجة بإحكاااااام و براعة عند قراءة الفكرة وبتمعن ، خطر لي سؤال :- ماذا يحدث عند نقل قاعدة البيانات إلى جهاز جديد ؟؟؟؟؟ ( هل سيتم نقل بيانات الاعتماد تلقائياً ؟ ) لكن جوهر الفكرة جميل جداً بأفكار صاحب الأفكار الجميلة ,,,
  5. بسيطة ان شاء الله اخي الكريم ، جرب هذا التعديل ، حيث تم استخدام الكود التالي للتحقق والاضافة عندم عدم وجود العام الدراسي الحالي . Private Sub MeetingDate_AfterUpdate() Dim academicYear As String Dim rs As DAO.Recordset Dim response As VbMsgBoxResult Dim prevDate As Variant On Error GoTo ErrHandler academicYear = IIf(Month(Me.MeetingDate) >= 9, _ Year(Me.MeetingDate) & "-" & (Year(Me.MeetingDate) + 1), _ (Year(Me.MeetingDate) - 1) & "-" & Year(Me.MeetingDate)) Set rs = CurrentDb.OpenRecordset("SELECT Academic_Name FROM AcademicYearTble WHERE Academic_Name = '" & academicYear & "'", dbOpenSnapshot) If rs.EOF Then response = MsgBox("العام الدراسي """ & academicYear & """ غير موجود." & vbCrLf & "هل تريد إضافته؟", vbQuestion + vbYesNo + vbMsgBoxRight, "إضافة عام دراسي") If response = vbYes Then CurrentDb.Execute "INSERT INTO AcademicYearTble (Academic_Name) VALUES ('" & academicYear & "')", dbFailOnError Me.Academic_Name = academicYear Else MsgBox "تم إلغاء التحديث.", vbExclamation Me.Undo End If Else Me.Academic_Name = academicYear End If rs.Close Set rs = Nothing Exit Sub ErrHandler: MsgBox "حدث خطأ: " & Err.Description, vbCritical + vbMsgBoxRight, "" On Error Resume Next rs.Close Set rs = Nothing End Sub الملف بعد التعديل AcademicYear2.accdb
  6. لا تعلو عين فوق حاجبها .. أنتم الأصل ومنكم نستفيد ونتعلم معلمي الفاضل . بالطبع هو أفضل ، وإن كان لي رأي في التصميم نفسه !! فما الحاجة لأن يكون مكرراً قيمة السنة في مربعي نص ( كود السنة الاكاديمية ، و اختيار السنة الاكاديمية ) . ولكني تماشيت مع طلبه ليس إلا .
  7. في كانت كفكرة تشبيه إنه يكون عنده أكثر من فاتورة = أكثر من طاولة . ومن الغير طبيعي انه يكون الكاشير قادر على التعامل مع أكثر من 3 فواتير تقريباً .. فهنا ممكن يكون عنده زر "فواتير مستخدمة الآن" على سبيل المثال . ويقدر يحجز فاتورة بسجل جديد الفكرة كانت تشبيه فقط ، كأن المستخدم عنده أكثر من فاتورة شغالة في نفس الوقت ، زي نظام الطاولات في مطعم ، كل طاولة لها فاتورة خاصة ، ويتنقل بينها بحرية . وطبيعي إن الكاشير ما يقدر يتابع أكثر من 2 أو 3 فواتير بنفس الوقت ، فممكن يكون فيه زر مثلاً اسمه "فواتير قيد الاستخدام" ، يعرض له الفواتير المفتوحة اللي ما تم إنهاؤها . يقدر من خلاله يحجز فاتورة جديدة (زي حجز طاولة) ، ويتنقل بين الفواتير النشطة ، وينهيها وقت الدفع . وطبعاً هنا نقدر نسمي الفكرة بـ "تعليقا فاتورة" بحيث عند النقر عليه يتم تعليقا الفاتورة والإستفادة من فكرة الحقل Yes/No السابق ذكره ,
  8. بالطبع سيكون الموضوع أكبر من مجرد قيمة = قيمة ، فماذا لو كان الاختيار لتاريخ أكبر بـ 5 سنوات وغير مدرج في الكومبوبوكس Academic_Name !!!!
  9. وعليكم السلام ورحمة الله وبركاته ،، مشاركة معنوية مع الأساتذة والمعلمين ، وكفكرة أستاذنا @kkhalifa1960 ، هي جميلة وتجهلك تتنقل بين الفواتير التي تريدها ، وتستطيع التعديل عليها كتحسين ( لا ينقص من جمالها شيء طبعاً ) بحيث يتم تعليم الفواتير التي تم دفعها بحقل Yes/No = Yes للفواتير المدفوعة ، وهنا سيتم عرض الفواتير التي لها قيمة = No . وطبعاً في زر الدفع سيتم اضافة استعلام لتحديث قيمة هذا الحقل = Yes مع Requery للقائمة المنسدلة . أو أن التنفيذ الذي يحاول أخونا الكريم الوصول اليه هو ما يشبه نظام الطاولات في مطعم على سبيل المثال ، على اعتبار ان الطاولات هي فواتير مفتوحة ولكل فاتورة رقم تم حجزه ويحتوي بيانات ، ويتنقل بينها كيف ما يشاء وإنهاء ما يشاء حسب الإنتهاء منهم .
  10. وعليكم السلام ورحمة الله وبركاته ,, جرب هذه الفكرة البسيطة ، في حدث بعد التحديث لمربع نص تاريخ الإجتماع :- Private Sub MeetingDate_AfterUpdate() Me.Academic_Name = Me.Text7 End Sub طبعاً هذا سيعتمد على تحديث القيم في القائمة المنسدلة بشكل تلقائي كل سنة دراسية على سبيل المثال , AcademicYear.accdb
  11. الله يعطيكم العافية ، نقاشكم أثرى معلوماتي وأضاف لي الكثير ، فجزاكم الله خيراً . تسمحولي أطرح عليكم كم سؤال خطروا في بالي .. ؟ 🔸 في التطبيقات الكبيرة التي تحتوي على بيانات ضخمة ، برأيكم : هل من الأنسب تحميل البيانات من جدول الإعدادات إلى TempVars عند بدء التشغيل ، أم أن القراءة من الجدول عند الطلب أفضل ؟ ولماذا ؟ 🤔 🔸 هل ترون أن وجود جدول إعدادات واحد رئيسي كافٍ ؟ ، أم أن الأفضل تقسيم الإعدادات على جداول منفصلة حسب الحاجة (مثل إعدادات النظام ، المستخدم ، النماذج ... إلخ ) ؟ 🔸 وأخيراً ، إذا تغيّرت بعض الإعدادات أثناء تشغيل البرنامج ، فما الطريقة المثلى لإعادة تحميل أو تحديث TempVars دون الحاجة لإعادة تشغيل البرنامج ؟ 🌟 كل الشكر والتقدير لكم معلمينا وأساتذتنا الأفاضل .
  12. لله درك .. ما شاء الله جميلة جداً ، وفكرة رائعة ومسلية جربتها أكثر من نصف ساعة مستمتعاً بفكرتها .. وخطرت لي عدة تحديثات ، فمثلاً :- اضافة مستوى تدريبي لأول مرة لللاعب كي يتفهم فكرتها الجميلة . اضافة مستويات أكبر من مستويين تحديث مؤثرات بصرية عند الرقم الصحيح أو الخاطئ .. إضافة مؤشر تحميل تنازلي لزيادة متعة اللعبة ( إضافة الى الرقم التنازلي ) فقد يكون غير ملحوظ لللاعب عند تركيزه على الارقام ,, وأيضاً تعديل فكرة كتابة الاسم لكل لاعب في كل مستوى ( عند اللعب الجماعي ) عند كل لعبة جديدة أو مستوى جديد ، حتى لا تضيع فكرة المتعة والتركيز وما تبقى في أصل الفكرة هي جميلة جداً وممتعة
  13. تعقيباً على ما أشار إليه المهندس @Moosak ، ومن باب التوضيح ، فإن الترتيب المثالي ( من الناحية الفنية والأداء ) يجب أن يكون :- الثوابت ( Constants ) يجب أن تظهر بعد الإعلانات لأنها قد تعتمد على قيم من الإعلانات . الإعلانات ( Declares ) يجب أن تكون في البداية لأن الكود البرمجي يعتمد عليها . وضع الكود البرمجي في النهاية يجعل الكود أكثر تنظيماً وسهولة في القراءة . فشكراً للفت الإنتباه لهذه النقطة ، وقد تم الانتهاء منها بإذن الله تعالى .
  14. انا آسف لمشاركتك الموضوع ، حاولت أوضحلك الفكرة أن ما فيش كود يقدر يحل مشكلتك بالبساطة اللي انت متخيلها . تحويل الأكواد دي بحر وااااسع ومش بكود بسيط تقدر تمشي أي كود على النواتين 32 و 64 . شكراً لك ، وأعتذر عن مشاركتي السابقة اللي انت ما استفدتش منها حاجة .
  15. وعليكم السلام ورحمة الله وبركاته ،، أتمنى أن تكون الصورة قد وضحت لي وتم فهمها بالشكل الصحيح 😅 .. انظر للصورة الأولى :- والنتيجة للصورة الثانية :- هل تلبي المطلوب بالشكل الصحيح ؟ خبرتي في اكسل قليلة جداً مقارنة مع الأساتذة ( دون استثناء ) في هذا الصرح الكبير . التنفيذ تم باستخدام الماكرو التالي :- Sub FillAccountNum() Dim ws As Worksheet Dim lastRow As Long Dim i As Long, j As Long Dim accountVal As String Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row For i = 2 To lastRow If InStr(1, ws.Cells(i, "K").Value, "متبقي تعاقد مشروع قسط") > 0 Then For j = i + 1 To lastRow If Trim(ws.Cells(j, "A").Value) Like "Account*" Then accountVal = ws.Cells(j, "A").Value ws.Cells(i, "A").Value = accountVal Exit For End If Next j End If Next i End Sub المرفق بعد التنفيذ :- EXPORT.xlsm وفيما يلي ، توضيح لتفعيل وضع المطور واختيار الماكرو للشيت الحالي .. جرب وأخبرني بالنتيجة ، للمتابعة .
  16. وعليكم السلام ورحمة الله وبركاته .. راجع هذا الموضوع ، عله يفيدك ، مع العلم أن الأداة قيد التطوير والتحديث
  17. ولأجمل هو تشريفكم لنا بملاحظاتكم ومروركم العطر .. بارك الله فيكم ، وهي ما زالت في طور التحديث كلامك سليم ، وكانت من ضمن الاحتمالات التي مررت بها ، ولكن لله الحمد تم إضافة التعديل وأصبحت النتيجة لأول تجربة لك = '=================================================== ' API Code Converter for Dual Compatibility (32-bit & 64-bit) ' Developed By Foksh (Officena.Net) ' Generated on: 2025-05-29 10:34:09 ' Tool version: v1.3 '=================================================== #If VBA7 And Win64 Then ' 64-bit declarations Public Declare PtrSafe Function CopyFile Lib "kernel32" Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long #Else ' 32-bit declarations Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA"(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long)As Long #End If لمتابعتكم إن كانت النتيجة صحيحة .. جزاااكم الله خيراً تم الاطلاع واكتساب الفائدة . والتجربة الثانية ، بعد التحديثات الحالية كانت نتيجتها = '=================================================== ' API Code Converter for Dual Compatibility (32-bit & 64-bit) ' Developed By Foksh (Officena.Net) ' Generated on: 2025-05-29 10:37:15 ' Tool version: v1.3 '=================================================== Private Const KEYEVENTF_KEYUP = &H2 ' Get the current state of the NumLock key Function GetNumLockKey() As Boolean GetNumLockKey = GetKeyState(vbKeyNumlock) End Function Sub SetNumLockKey(ByVal newState As Boolean) ' if the current state must be changed If CBool(GetKeyState(vbKeyNumlock)) <> newState Then ' programmatically press and release the NumLock key keybd_event vbKeyNumlock, 0, 0, 0 keybd_event vbKeyNumlock, 0, KEYEVENTF_KEYUP, 0 End If End Sub #If VBA7 And Win64 Then ' 64-bit declarations Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, _ ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long #Else ' 32-bit declarations Private Declare Sub keybd_event Lib "user32"(ByVal bVk As Byte, _ ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Declare Function GetKeyState Lib "user32"(ByVal nVirtKey As Long)As _ Long #End If هل توافق المطلوب أم لا ؟؟ هذه النقطة كنت قد سهوت عنها من كثرة التجارب ، وكنت اعتمد القص بدلاً من النسخ 😅 . سيتم اعادة الكود للنسخ بدلاً من القص .
  18. 📌 مقدمة عن الأداة :- أقدم لكم أداة متقدمة لتحويل أكواد API في آكسيس من الإصدارات القديمة والحديثة ، لتكون متوافقة مع أنظمة 64-bit مع الحفاظ على التوافق مع أنظمة 32-bit . هذه الأداة تم تطويرها خصيصاً لمطوري ومبرمجي قواعد البيانات الذين يعانون من مشاكل التوافق عند الترقية إلى إصدارات أوفيس 64-bit . 🎯 المشكلة التي تحلها الأداة :- مع إصدار أوفيس 64-bit ، تغيرت بنية المؤشرات والأنواع الخاصة بمناولة النوافذ (Handles) من Long (32-bit) إلى LongPtr (64-bit) . هذا التغيير جعل معظم إعلانات API القديمة غير صالحة للعمل على الإصدارات الجديدة ، مما يتطلب تعديلها يدوياً لها . ما الجديد في التحديث الجديد ؟ ميزات الأداة الرئيسية والمحدثة :- تحويل تلقائي للإعلانات :- تقوم بتحويل إعلانات API من صيغة 32-bit إلى صيغة مزدوجة ( 32 و 64 ) متوافقة مع كلا النظامين . دعم أنواع البيانات الخاصة :- تدعم الأنواع المعرفة من المستخدم (User-Defined Types) مثل RECT , POINTAPI وغيرها . تحليل ذكي للكود :- تتعرف على المتغيرات التي تحتاج تحويلاً وتعدلها تلقائياً . حفظ التوافق مع الإصدارات القديمة :- تحافظ على عمل الكود على أنظمة 32-bit أثناء إضافة دعم 64-bit . واجهة سهلة الاستخدام :- توفر واجهة بسيطة لتحويل الأكواد بنقرة واحدة . كيف تعمل الأداة ؟ تعتمد الأداة على عدة خطوات ذكية لتحليل الكود وإجراء التحويل :- 1. تحليل الإعلانات :- تفحص كل إعلانات API لتحديد ما إذا كانت تحتاج إلى تعديل أم لا !!! 2. تحديد أنواع البيانات :- تتعرف على المتغيرات من نوع Long التي تمثل مؤشرات أو مقابض (Handles) بشكل تلقائي وذكي . 3. إنشاء كود مشروط :- تولد كوداً يستخدم التعليمة الشرطية #If VBA7 And Win64 Then للتفريق بين النظامين . 4. الحفاظ على الهيكل الأصلي :- تحافظ على التعليقات والتنسيق الأصلي للكود قدر الإمكان . ( باللغة الإنجليزية حالياً) . أنواع API التي تتعامل معها الأداة :- تتعامل الأداة مع مجموعة واسعة من إعلانات API ، بما في ذلك :- إدارة النوافذ (User32.dll) FindWindow, GetWindow, SetWindowPos SendMessage, PostMessage GetWindowRect, GetWindowText إدارة الذاكرة والعمليات (Kernel32.dll) VirtualAlloc, VirtualFree OpenProcess, CreateProcess GetModuleHandle, GetProcAddress إدارة التسجيل (Advapi32.dll) RegOpenKey, RegCreateKey RegQueryValue, RegSetValue إدارة واجهة المستخدم CreateDC, CreateCompatibleDC SelectObject, DeleteObject الخصائص الفنية للأداة :- الدقة في التحويل :- تتعرف الأداة على السياقات المختلفة للمتغيرات من نوع Long لتحديد ما إذا كانت تمثل مقابض تحتاج للتحويل . دعم اللغات :- تدعم الواجهة اللغتين العربية والإنجليزية . التحقق من الأخطاء :- تحتوي على آلية للتحقق من الأخطاء المحتملة أثناء التحويل . التعامل مع الاستثناءات :- تتعرف على الدوال التي لا تحتاج للتحويل مثل GetVersion وGetTickCount .
  19. وعليكم السلام ورحمة الله وبركاته .. احذف بيانات الجدول ( Tbl_degree_Detail ) أولاً ، ثم عدل الاستعلام في زر الاعداد الى التالي :- DoCmd.RunSQL "INSERT INTO Tbl_degree_Detail ( draseid, draseDate, Stu_card, Elsaf, madaNum, madaName, ramz, ramz2, Stugalos ) " & vbCrLf & _ "SELECT [forms]![frm_DraseIN]![drase] AS drs, [forms]![frm_DraseIN]![Text1] AS drsdt, Tbl_student.Stucard, Tbl_student.alsaf_Id, Tbl_materil.materil_id, Tbl_materil.materil, Tbl_materil_Detail.rmz, Tbl_materil_Detail.rmz2, Tbl_student.Stugalos " & vbCrLf & _ "FROM Tbl_materil INNER JOIN ((Tbl_saf INNER JOIN Tbl_student ON Tbl_saf.saf_id = Tbl_student.alsaf_Id) INNER JOIN Tbl_materil_Detail ON Tbl_saf.saf_id = Tbl_materil_Detail.saf_No) ON Tbl_materil.materil_id = Tbl_materil_Detail.mat_NO;" طبعاً وللتأكيد بإخبارك بضرورة إضافة نفس الحقل من نفس النوع في الحدول المستهدف ، واعتقدت بعدم ذكرها أنك تعلم ذلك جرب وأخبرني بالنتيجة .. 😅
  20. 💥 الإداة بواجهتين ( عربي - انجليزي ) والرسائل والردود حسب كل لغة Code Converter x64.zip Code Converter x32.zip طبعاً ، أتمنى ممن يرغب بتجربة الأداة بأول إصدار لها ، أن يزودني بالنتيجة التي قام بها على الكود ، بحيث :- ينشر في رده الكود الأصل ( الذي قام بتجربته ) ، والكود الناتج ( بعد تحويله من الأداة ) لتعم الفائدة ولمعرفة الأخطاء التي قد تحدث ( ولا شك أن الأداة تحتوي أخطاء كثيرة ، ولكن لإجراءاتكم بالإفادة ) . إن كان يملك الكود الصحيح والمنطقي ( الذي يعمل على النواتين ) ، فشاكراً له تزويدنا به للمقارنة . Code Converter x32.zip Code Converter x64.zip
  21. نعم فهمتك على ما أعتقد ، انت تريد زر الطباعة أن يعمل على أي تقرير تم فتحه ( في الوقت الحالي ) ، صحيح ؟؟ سنحاول الإستفادة من المتغير العام :- Public namerpts As String بحيث نمرر لزر التصدير اسم التقرير الحالي بشكل ديناميكي . وعليه فيصبح الكود لزر التصدير كالتالي :- Dim stDocName As String, xx As String, strPathAndfile As String Dim reportDate As Variant stDocName = namerpts On Error Resume Next reportDate = [Reports]![namerpts]![DATE] On Error GoTo 0 If IsNull(reportDate) Or Not IsDate(reportDate) Then xx = stDocName & "-" & Format(DATE, "dd_mm_yyyy") Else xx = stDocName & "-" & Format(reportDate, "dd_mm_yyyy") End If strPathAndfile = CurrentProject.Path & "\" DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, strPathAndfile & xx & ".pdf", True لم أقم بتصعيد الموضوع بكود طويل ، واقتصرت على الكود السابق لسهولته وفهمه بسهولة ,, تفضل الملف بعد التعديل ، جربه وأخبرني بالنتيجة . ملاحظة .. يفضل أن يكون اسم الحقل الخاص بالتاريخ متساوي في كل التقارير ، لتلافي تطوير الكود . حفظ بصغة PDF.zip
  22. افتح هذا الملف من جهازي ، بعد ضبط وتغيير حجم الخط ومساحة مربع النص 0 العرض ) ، ثم تصدير التقرير .. علماً أن الخط Sultan Medium ليس موجوداً على جهازي . rptTransfer_BEA_Ccp-19_01_2025.pdf
  23. اخي الكريم ، المشكلة قد تكون بحجم الخط ، حاول إما تكبير مربع النص ، أو تصغير حجم الخط !!!
×
×
  • اضف...

Important Information