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

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

  1. Ali Mohamed Ali

    Ali Mohamed Ali

    المشرفين السابقين


    • نقاط

      1,815

    • Posts

      11,621


  2. Moosak

    Moosak

    أوفيسنا


    • نقاط

      1,655

    • Posts

      1,823


  3. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      1,433

    • Posts

      11,623


  4. محمد هشام.

    محمد هشام.

    الخبراء


    • نقاط

      1,400

    • Posts

      1,032


Popular Content

Showing content with the highest reputation since 30 ينا, 2022 in all areas

  1. السلام عليكم ورحمة الله وبركاته تحية طيبة وبعد اهدى هذا الشيت الى منتدى اوفيسنا واساتذته الذين تعلمنا على ايديهم واهديه الى مهندس المنتدى مهندس طارق محمود الذى لم يبخل على فى تقديم الحلول والمساعدات ، وحقيقة وجودى فى منتدى اوفيسنا يعد تكريما لى وشرف الشيت سهل الاستخدام ولا يحتاج الى شرح يوجد ايقونة باسم الصور اذا حبيت تضيف صورة للطالب وبجوار زر الصور زر اخر لمعاينة الصورة ان حبيت تعمل معاينة للصور 1795607452_.xlsm
    25 points
  2. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته يسرني اليوم أن أقدم لكم هذه الهدية الرمضانية المتميزة والرائعة 😊 ( الكاتب الذكي لدوال المجال في أكسس ) Dloockup, DCount, DMax, DMin, Dfirst, DLast , DSum, DAvg هذه الأسطورة هي عبارة عن أداة صممتها في أكسس ( بفضل الله وحمده ) تقوم بكتابة دوال المجال نيابة عنك بشكل آلي .. وتعطيك النتيجة بشكل مباشر 😉👌🏼 لن يخطيء أحد بعد اليوم في كتابة جملة هذه الدوال إن شاء الله 😁 كل ما عليك فعله هو استيراد هذه الأداة لبرنامجك ثم اختيار الجدول أو الاستعلام المطلوب والحقل المراد وبعدها سترى العجب العجاب 🙂 ✨ ومن مزاياها :✨ 1 - تسهل عليك كتابة أسماء الجداول والحقول ( فقط تختارها من القائمة المنسدلة ) . 2- يحل مشكلة تداخل النصوص عند استخدامها مع الجداول والحقول المكتوبة باللغة العربية . 3- تفحص لك النتيجة مباشرة للتأكد من أنك ستحصل على البيانات التي تريدها . 4 - سهلة الاستخدام فقط اتبع الخطوات الموضحة وتأكد من اختيار نوع البيانات الصحيح . 5 - يمكنك عمل دالة بأربعة 4 معايير بكل سهولة ويسر . 6 - يمكنك عمل تعديلاتك الخاصة على الدالة مباشرة وفحص النتيجة مباشرة بعد التعديل على النتيجة النهائية . 7 - إمكانية الحصول على الصيغة الخاصة بمحرر الأكواد VBA أو الصيغة المستخدمة في الاستعلامات ومنشيء التعبير . 8- إمكانية استخدام الأداة بشكل مستقل من غير الحاجة لنقلها إلى برنامجك . 9- وغيرها الكثير مما سيفتح الله عليكم اكتشافه بأنفسكم إن شاء الله 😅 طريقة الاستخدام : سهلة يسيرة بحمد الله .. فقط قم بسحب النموذج المسمى SmartDomainFunctionsBuilder_F إلى برنامجك عن طريق السحب والإفلات .. ثم قم بفتح النموذج عندك وسوف يقوم هو آليا بالتعرف على الجداول والاستعلامات الخاصة ببرنامجك بدون الحاجة إلى جهد يذكر 🙂 ( مع إمكانية استخدام الأداة بشكل مستقل من غير الحاجة لنقلها لبرنامجك ولكنك ستفقد الكثير من المميزات 😉 ) الأداة تم عمل الكثير من التجارب عليها وتم تلافي العديد من الأخطاء وإصلاحها بحمد الله وفضله... ولكن لا زلت لا أستغني عن آراءكم وملاحظاتكم من خلال استخدامكم لها 😉 الشرح بالتفصيل : 🙂 وهنا قمت بشرح الأداة بشكل مفصل نوعا ما في مقطع فيديو مدته نصف ساعة تقريبا : وأخيرا التحميل 😊 تحميل الملف الأصلي : >> حمل من هنا آخر إصدار للأداة << تحميل الملف بلمسات المهندس العزيز @د.كاف يار : د.كاف يار __Domain Functions Builder V1.0.accdb وأهم من الأداة نفسها 😉 لا تنسوني من صالح دعائكم لي ولوالدي .. ولا تحرموني من آرائكم ومقترحاتكم ونصحكم وإرشادكم 🙂 أخوكم ومحبكم موسى الكلباني 😊 ‏‏Domain Functions Builder V1.0.accdb
    23 points
  3. بسم الله الرحمن الرحيم السلام عليكم ورحمه الله وبركاته اساتذتي واخوتى هذا الملف به فهرس لجميع المنتدي ليسهل البحث للاعضاء يوجد فورم يمكنك البحث بها كما يمكنكم استخدام الفلتر العادي وبمجرد الضغط على اي نتيجه من نتائج البحث يتم فتح صفحتها في المنتدي ولا انسي فضل استاذي الكبير ياسر خليل على المساعده في عمل الملف فهرس منتدي الاكسيل.xlsb
    17 points
  4. السلام عليكم ورحمة الله تعالى وبركاته نظرا للطلب والتساؤلات الكثيرة حول الموضوع او نقاط فرعيه منه قاصدا من ذلك أن يكون الموضوع شاملا ومرجعا للراغبين فى ذلك والدراسبن اليكم بناء القاعدة والذى اتمنى على الله تعالى ان يبدأ البناء وينتهى بشكل احترافى بقدر الإمكان وسوف نبدأ من الصفر تباعا ان شاء الله سوف يتم تحديث الموضوع تباعا الموضوع بأمر الله سوف اضع له الخطوط العريضة طبقا للمؤسسة التى اعمل بها لاننى أصلا سوف اقوم بقاعدة البيانات لمؤسستى وبقدر الإمكان سوف أضع فى الحسبان ان يكون التصميم عام بقدر الإمكان ليتناسب ويتماشى مع الجميع ومع رغباتهم بقدر الإمكان اهلا بكل من يريد المشاركة فى ادراة الموضوع والافكار والتعديل او الاضافة و ...... مبدئيا خلونا نتفق وقتى ضيق فى الفترة المقبلة لما انا مقدم عليه فلذلك ارجو الاعتذار مقدما ان لم التفت الى اى تساؤلات والتى وإن حدث سوف يتم تأجيلها حتى ينتهى مشروع اعداد التطبيق لمؤسستى تماما ان شاء الله بسم الله وعلى بركة الله بداية المشروع اول شئ تصيد وتسجيل الاخطاء بجدول وده وظيفته تسجيل الحطأ باسم الحدث أو الدالة المستخدمة فى الكود عند تنفيذ امر ما ورقم الخطا وصفه للمساعدة مستقبلا فى الوقوف على اماكن الاخطاء لعمل الصيانة اللازمة طبعا تم التطرق اليه فى هذا الموضوع: ويمكنكم الذهاب اليه والمتابعة من هنا طيب حلو جدا جدا وعلشان انا هبدأ بالأكواد ملاحظات هامة جدا جدا جدا جدا لبداية صحيحة واحترافيه : كتابة كود احترافي تتطلب ممارسات جيدة واتباع مبادئ برمجية صحيحة. فيما يلي بعض النصائح التي يمكن أن تساعدك في كتابة كود احترافي: توضيح الكود: استخدم تعليقات لشرح الجزء العلوي من الكود وللأمور المعقدة. اختر أسماء مفيدة وواضحة للمتغيرات والدوال تدل على وظائفها التى تمت كتابتها من اجلها. التنظيم: استخدم الهندسة المعمارية لتنظيم البرنامج إلى وحدات صغيرة وقابلة لإعادة الاستخدام. قم بتقسيم البرنامج إلى وحدات ووظائف مستقلة. الأداء: ابتعد عن الأكواد المكررة وقدّم الأكواد القابلة لإعادة الاستخدام في وحدات. حافظ على الأداء بتجنب العمليات الزائدة غير الضرورية. اختبار الوحدات: قم بكتابة اختبارات للتأكد من أن وحدات الكود الخاصة بك تعمل كما هو متوقع. الأمان: تحقق دائمًا من صحة البيانات الواردة والخارجة من الدوال. تفادى استخدام الأكواد المعرضة لثغرات أمان. تحسين الأداء: استخدم الهندسة العكسية لتحسين الأداء. ابحث عن فرص لتحسين الكفاءة والسرعة. استخدام التعليمات البرمجية النظيفة: ابتعد عن استخدام المتغيرات العالمية عندما لا تكون ضرورية. تجنب الأكواد التي تعتمد على التبديلات الطويلة. توثيق الكود: وفر توثيقًا جيدًا للكود ليسهل على المطورين الآخرين أو نفسك فهم كيف يعمل البرنامج. متابعة المعايير: اتبع معايير البرمجة المتعارف عليها . التحسين المستمر: كن مستعدًا لتحسين الكود الخاص بك بناءً على التعلم وتغييرات متطلبات المشروع. الالتزام بتلك المبادئ يمكن أن يساعدك في كتابة كود أكثر احترافية وقابل للصيانة. حلو الكلام وكل ده هيبان بقدر المستطاع فى التعليمات البرمجية التى سوف تتم تباعا يمكنك استخدام البادئات التالية لتسمية العناصر والكائنات بشكل منظم ويجعل الشيفرة أكثر وضوحًا. البادئات تعتمد على النوع أو الدور الذي تقوم به العناصر: وعلى سبيل المثال وليس الحصر المتغيرات: int للأعداد الصحيحة. dbl للأعداد العشرية. str للنصوص. bool للقيم البولية اى True , False أو Yes , No . Dim intCounter As Integer Dim dblAmount As Double Dim strName As String Dim boolIsValid As Boolean المصفوفات: arr للمصفوفات. Dim arrNames() As String الدوال: Function للدوال التي تعيد قيمة. Sub للإجراءات (دوال بدون إرجاع قيمة). Function CalculateTotal() As Double Sub DisplayMessage() الكائنات: frm للنماذج (Forms). rpt للتقارير (Reports). tbl للجداول (Tables). qry للاستعلامات (Queries). cls للكائنات أو الفئات لتعريف الكلاسات (Classes). bas وحدات الشيفرة- الوحدات النمطية (Modules). tbl للجداول (Tables). qry للاستعلامات (Queries). Dim frmCustomer As Form Dim rptSales As Report Dim tblData As TableDef Dim qryFilteredData As QueryDef الثوابت: c للثوابت. Const cMaxValue As Integer = 100 المتغيرات العامة: g للمتغيرات العامة. Public gCounter As Integer المتغيرات المؤقتة: temp للمتغيرات المؤقتة. Dim tempValue As Integer التعليقات: REM لتعليقات الشيفرة. REM هذا تعليق لشرح الشيفرة الأشكال والعناصر الرسومية: btn للأزرار (Buttons). lbl للتسميات (Labels). txt لحقول النص (Textboxes). chk لمربعات الاختيار (Checkboxes). القوائم والمراقبين: cmb لقائمة الاختيار (Comboboxes). lst لقوائم الاختيار (Listboxes). cb لمراقبات الصندوق (Checkboxes). الكائنات الأخرى: app لكائن التطبيق (Application). cnn لكائن الاتصال (Connection). doc لكائن المستند (Document). الحقول والأعمدة: fld لحقول البيانات (Fields). col لعمود البيانات (Column).
    17 points
  5. السلام عليكم اهداني اخي العزيز @حسونة حسين ملف اكسل يحتوي على جميع مواضيع منتدى اكسس وبروابط مباشرة اضعه بين ايديكم لا تنسونا من دعوات صالحات *********************** ( إضافات للموضوع - Moosak ) قمت بعمل تصميم بسيط لنموذج البحث وأضفته إلى الموضوع الرئيسي بعد أذن أستاذنا أبو خليل 🙂 بمجرد الكتابة تظهر النتائج .. لاستعراض الموضوع يتم الضغط على العنوان مباشرة النقر المزدوج على مربع البحث يعيد إظهار جميع النتائج 🙂 يمكن البحث بكلمات متفرقة في الجملة .. Search_Officena_Access.rar ********************************************** Access.rar
    16 points
  6. بسم الله الرحمن الرحيم الكتير منا بتجيله فكرة وعاوز ينفذها لكن عدم مقدرته علي الامساك بالخيط المناسب فيتراجع ويكبت افكاره مرة تلو الاخري لحد مايصل الي مستخدم غير قادر علي الابداع في مجاله المعذرة اني بكتب بالعامية لكن حبيت اشارككم بما في خاطري من فترة كنت بتصغح موقع هندي عجبتني فكرة الموقع في طرح المواضيع المحاضر يقوم بنشر الفكرةوينفذها مع المتابعين عن طريق درووس مدة كل درس حوالي 40 دقيقة يبدا بتصميم اليوزفورم وشرح الكود سطر سطر بيعمل ايه وليه ويرفق مع الشرح الكود فقط ويترك للمتابع المجال انه ينفذ هو ويحيك اليوز بنفسه ويركب الكود ويخطيء ويسال ويتعلم الاحساس بالتفاعل بين الاطراف بيولد طاقة ورغبة في المواصلة علي العطاء والشرح وكلنا بنتعلم من بعضنا البعض حسيت انه ده هو المهم اننا بنعمله في المنتدي ونتخلص من مشكلة الارشفة عند طرح الموضوع تلاقي نسبة المشاهدة 600 ونسبة تحميل الملف 400 والمشاركات تلاقيها 3 او 4 مشاركات عند طرح الموضوع ليس بقصد التقييم انما بقصد المشاركة نتفاعل ... نتعلم .... لكن للاسف معظمنا بحمل الملف ويحفظه في الارشيف دون التطرأ لما فيه او المحاولة لفهمه وده خلاني اطرح الموضوع الحالي واعتذر عن الاطالة الموضوع هو الفورم التغاعلي UserForm interactive التخلص من الشكل التقليديVisual Basic كلنا متفقين انه الـ Visual Basic موارده الجمالية محدودة لكن غير محدود في الخداع البصري وده يلي هانتعلمه دمج Infographics والبيئة التفاعلية مع الVisual Basic بحيث المستخدم لا يحس بالملل عند استخدامه بالمرفقات الملف يلي هانشتغل عليه خطوة خطوة في حالة قبول التفاعل مع بعضنا البعض لنتعلم ونبدع , الملف لا يحتوي الا علي الوظائف التفاعلية UserForm interactive.xlsm رابط الدرس الاول في الفورم التفاعلي اضافة MultiPage والتحكم في الانتقالات بينها من خلال التبويبات الرئيسة باستخدام Class Module رابط الدرس الثاني في الفورم التفاعلي Advance Data Entry Software مدخل للدرس الثالث How to Generate and Preview PDF File in Userform Create Dynamic Drop-Down Menu In Excel Userform قائمة شقية للاصناف الكثيرة والمتشابهة Pop-up form in Excel Userform شرح تفصيلي لأداة ال ListView وكيفية استخدامها والتعامل معها رابط الدرس الثاني ListView Right to Left الدرس الثاني Create Dynamic Drop-Down Menu In Excel Userform Dark Mood App Officana Business Application Final Template Generate QR Code برنامج ادارة الاشتراكات مع شاشة دخول متعددة المهام ZAD IPTV Subscriptions Create Drill Down Data Entry
    16 points
  7. السلام عليكم ورحمة الله وبركاته يسرني اليوم أن أقدم لكم هذه الهدية المتميزة والمتواضعة ( زاد المثابر للحصول على أسماء العناصر) هذه الأداة صممتها بفضل الله في أكسس تقوم بإحضار وسرد أسماء العناصر لك لكي تستطيع نسخها ولصقها في أي مكان تريد بكل سهولة ويسر 🙂 شخصيا أستفدت كثيرا منها وسهلت علي الكثير من الجهد وقلصت من وقت العمل بحمد الله وفضله. وهنا اختصرت على نفسي الكتابة وقمت بشرح الأداة مرئيا 🙂 متابعة ممتعة 😊👌🏼 ولا أستغني عن آراءكم وملاحظاتكم .. 🙂 لتحميل الملف المستخدم في الشرح وبه النموذج : التحديث 2.0 : تم إضافة خاصية جلب عناصر النماذج الفرعية .. والتقارير الفرعية .. شكرا للأخ @عمر ضاحى على الفكرة 🙂
    15 points
  8. الدرس الاول في UserForm عناصر الدرس 1- اضافة التبويبات الرئيسية للفورم 2- اضافة MultiPage والتحكم في الانتقالات بينها من خلال التبويبات الرئيسة باستخدام Class Module اولا : اضافة التبويبات الرئيسية 1- نقوم باضة userForm ثم نضيف اطار Frame ونضيف داخله عدد 5 Lebel بالنسبة لعنوان اكتب ما تشاء عربي انجليزي لكن المهم Label Name ( Btn1-Btn2-Btn3-Btn4) ا BackStyle =0 BorderStyle=0 واليبل الخامس لتغير خلفية النص Name=AnlBtn BackColor=&H8000000E& ثم نضيف ليبل خاص بالعنوان نسميه PageNo ثم نضيف MultiPage ونضيف في ال Page1 ثانيا ربط التبويبات بالفورم نضيف Class Module نكتب داخله الكود التالي Public WithEvents LblBtn As MSForms.Label Private Sub LblBtn_Click() ' للحركة بين التبويبات UserForm1.AniBtn.Left = LblBtn.Left 'ربط صفحات المالتي بيج مع التبويبات UserForm1.MultiPage1.Value = Right(LblBtn.Name, 1) - 1 'شريط العنوان UserForm1.PageNo.Caption = "Page No " & UserForm1.MultiPage1.Value + 1 & " ( " & LblBtn.Caption & " )" End Sub وفي الفورم Dim LblEvent(3) As New Class1 Private Sub UserForm_Initialize() With Me.MultiPage1 'لتغير استايل المالتي بيج .Style = fmTabStyleNone: .Value = 0 End With 'عدد التبويبات 4 من صفر الي 3 For AddEvent = 0 To 3 Set LblEvent(AddEvent).LblBtn = Me("Btn" & AddEvent + 1) Next AddEvent End Sub الملف بالمرفقات ياريت ننفذ الخطوات ولو اي استفسار ماتترد اتمني من الله اكون بسط الشرح ويكون فيه الاستفادة مع تحياتي MultiPage Officana.xlsm
    15 points
  9. السلام عليكم ورحمة الله وبركاته .. وبدون مقدمات 🙂 يطيب لي أن أضع بين يديكم برنامج ( مكتبة الأكواد الخاصة ) كان الهدف من تصميم البرنامج أن يخدمني بشكل خاص وذلك لحفظ الأكواد التي أحتاجها بشكل دائم وتجميعها في مكان واحد وتسهيل عملية البحث والوصول إليها بكل سهولة .. والبرنامج به تجميعة طيبة من الأكواد بعضها مما أبدعه الشباب هنا وبعضها مما صنعتها بنفسي ومنها من مواقع مختلفة .. والآن أحببت أن أشارككم بها وأن تعم الفائدة للجميع 🙂 البرنامج طبعا مفتوح بأحلاسه وأقلاسه ( بنماذجه وأكواده ) 😁 ويوجد فيه خاصية البحث ، وإدراج مرفقات (خارجية طبعا ) ومتاح للتطوير والتعديل والزيادة وتطويعه حسب احتياجاتكم .. 🌹 :: ولا تنسوني من صالح دعواتكم :: Pleeeeeeeeeeeeeeese 😄🤲🌷🌹 (واجهة البرنامج) (نافذة تفاصيل الكود) أعتقد البرنامج ما محتاج شرح واضح وضوح الشمس 😁 ::والتحميل في المرفقات :: مكتبة الأكواد الخاصة.accdb
    15 points
  10. AutoFilter with 34 Dynamic Filter Criteria اتوفلتر ب 34 دينامك شرط كما لم تراه من قبل !!!_XlDynamicFilterCriteria.xlsb
    15 points
  11. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته اليوم جئتكم بفكرة جديدة وإبداعية لتحديث نسخة الواجهات FE لدى المستخدمين بدون الاستعانة بملفات وبرامج خارجية 🙂 وذلك بالاستعانة بملفي الواجهات FE وملف قاعدة البيانات ( الجداول ) BE فقط 😊 وقد قمت بشرح الفكرة ومحاولة تبسيطها قدر الإمكان من خلال الشرح الآتي مستعيناً بالله وتوفيقه .. :: أصل المشكلة :: أولاً : من المعلوم أنه يفضل أن يكون البرنامج مقسم إلى ملفين ( الواجهات FE - وقاعدة الجداول BE ) وذلك لكي يعمل عليه أكثر من مستخدم. FE: هي اختصار لـ Front End النهاية الأمامية .. أي ملف الواجهات و BE: هي اختصار لـ Back End النهاية الخلفية .. وهو ملف الجداول ملف الـ BE غالبا ما يكون مخزن في السيرفر بطريقة يمكن لجميع المستخدمين من الوصول إليه حيث أن البيانات جميعها يتم تخزينها فيه. ويتم توزيع ملفات الـ( FE) على أجهزة المستخدمين ، وهي محور حديثنا لهذا اليوم الرائع الجميل .. 😊 مختصر الكلام : أنه كثيرا ما يعاني مصممو البرامج من إعادة توزيع ملفات الواجهات ( FE ) على أجهزة المستخدمين عندما تكون هناك تحديثات جديدة على البرنامج أو معالجة لأخطاء في البرنامج ... الطريقة والفكرة التي سنتحدث عنها اليوم تقوم بحل هذه المعاناة وجعل البرنامج يقوم بتوزيع الـ (FE) نيابة عنك أوتوماتيكيا وبدون أي جهد يطلب من المستخدمين .. 😉 :: شرح الفكرة وآلية العمل :: الفكرة التي سأطرحها قائمة على الاتصال بملف الجداول الـ (BE) والاستعانة به ليقوم بتوزيع ملف التحديث الجديد على أجهزة المستخدمين بعد أن يستبدل القديم بالجديد .. حيث أننا سنحتاج إلى : 1 - جدول في قاعدة الـ (BE) ومتصل بنسخة الـ (FE) كذلك، لتخزين روابط مواقع كل ملف ( FE - BE - New Update ). 2- ماكرو Autoexec وضيفته تشغيل الكود الذي سيفحص وجود تحديثات جديدة من عدمه عند بدء تشغيل البرنامج ، ويوضع في نسخة الـ (FE). 3- سنحتاج لإضافة نموذج في نسخة الجداول الـ (BE) مهمته تشغيل الكود الذي سيحدث نسخة الـ (FE). والكود يعمل عند حدث (عند التشغيل - ON OPEN ). 4- سنحتاج لجدول (محلي) يبقى في نسخة الواجهات الـ (FE) فيه حقل تاريخ عبارة عن سجل واحد يكتب فيه تاريخ الإصدار للنسخة الحالية. وهذا شرح مصور مبسط لآلية العمل : الصورة (1) : محتويات الملفات الأساسية المستخدمة في العمل. الصورة (2) : المرحلة الأولى : فحص وجوود تحديثات جديدة من خلال ملف الواجهات FE الصورة (3) : رسالة تأكيد للبدء في التحديث الصورة (4) : الخطوة الثالثة : إغلاق ال(FE) وفتح ال(BE) الصورة (5) : إستبدال النسخة القديمة بالجديدة وإعادة تشغيل البرنامج 🙂 هذا كل شيء ببساطة 😅🖐️ :: الأكواد المستخدمة :: أولاً : الكود المستخدم في ملف الواجهات الـ (FE) : Public Sub UpdateUsersFE(CurrentVerDate As Date, NewVerDate As Date, _ txtOldFEPath As String, txtNewFEPath As String, _ txtBEPath As String, txtBEUpdateForm As String, _ DoTheUpdaet As Boolean) On Error Resume Next ' ************************************************** Check If the Manager Send The Update Order If DoTheUpdaet = True Then ' Continue The Code Else MsgBox "لا يوجد تحديث جديد" Exit Sub End If ' ************************************************** Check Version Date If CurrentVerDate < NewVerDate Then ' Continue The Code ' MsgBox "سوف يتم التحديث إن شاء الله" ' Exit Sub Else ' MsgBox "لديك آخر إصدار" Exit Sub End If ' *************************************************** Confermation Msg. If MsgBox("لديك تحديث جديد للبرنامج، متابعة؟", vbYesNo, "Apply New Update?") = vbYes Then Else: Exit Sub End If ' ************************************************** Open the BE and the Update Form Dim objAdb As Object Set objAdb = CreateObject("Access.Application") objAdb.OpenCurrentDatabase (txtBEPath) objAdb.DoCmd.OpenForm txtBEUpdateForm objAdb.Visible = False ' ************************************************** Close FE Database DoCmd.Quit Set objAdb = Nothing End Sub Public Function testUpdate() Dim BackEndPath As String, FrontEndPath As String, UpdatePath As String, CurrentVerDate As Date, NewVerDate As Date, StartUpdating As Boolean CurrentVerDate = DFirst("[VersionDate]", "[FE_Tbl_Version]") NewVerDate = DFirst("[LastUpdateDate]", "[BE_Tbl_Updates]") BackEndPath = DFirst("[BackEndPath]", "[BE_Tbl_Updates]") FrontEndPath = DFirst("[FrontEndPath]", "[BE_Tbl_Updates]") UpdatePath = DFirst("[UpdatePath]", "[BE_Tbl_Updates]") StartUpdating = DFirst("[StartUpdating]", "[BE_Tbl_Updates]") Call UpdateUsersFE(CurrentVerDate, NewVerDate, FrontEndPath, UpdatePath, BackEndPath, "BE_Frm_StartUpdating", StartUpdating) End Function ثانياً : الكود المستخدم في ملف الجداول الـ (BE) : #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Private Sub Form_Open(Cancel As Integer) Call UpdateFE End Sub Public Sub UpdateFE() Dim FrontEndPath As String, NewUpdatePath As String FrontEndPath = DFirst("[FrontEndPath]", "[BE_Tbl_Updates]") NewUpdatePath = DFirst("[UpdatePath]", "[BE_Tbl_Updates]") 'On Error Resume Next '********************************************************************(Waite for 3 seconds until FE Closed ) Sleep 3000 '********************************************************************(Copy the New Update to the User PC) Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") 'Kill FrontEndPath 'Sleep 1000 fs.CopyFile NewUpdatePath, FrontEndPath, True '********************************************************************(Open the new FE for the user) 'Sleep 1000 Dim objAdb As Object Set objAdb = CreateObject("Access.Application") objAdb.OpenCurrentDatabase (FrontEndPath) objAdb.Visible = True objAdb.DoCmd.RunCommand acCmdAppMaximize '*********************************************************************(Close BE) DoCmd.Quit Set objAdb = Nothing End Sub :: (مهم جدا ) قبل التجربة والتطبيق :: ستجدون في المرفقات ثلاثة ملفات: - ملف الواجهات القديم (FE-MyApplication) - ملف الجداول (BE-MyApplicationDatabase) -وملف الواجهات المحدث (FE-NewUpdateV2.0) أولاً : يجب إعادة ربط ملفي الواجهات (القديم + التحديث ) بملف الجداول (يدوياً ) .. وهي خطوة مهمة للعمل .. ( يمكنك عملها أوتوماتيكيا بالأكواد في برنامجك لاحقاً ، لم أشأ تعقيد الأمور هنا 😅) ثانياً : يجب عليك تحديث روابط أماكن الملفات الثلاثة في جدول (BE_Tbl_Updates) وذلك من خلال النموذج (FE_Frm_UpdateInfo) الموجود في نسخة الواجهات. والآن يمكنك الانطلاق والبدء في تجربة البرنامج 😉👊 قم بتشغيل البرنامج FE-MyApplication وانتظر لترى النتيجة 😊👌 ملاحظة : لإعادة التجربة مرة أخرى بعد التحديث ، قم بتأخير تاريخ النسخة الأمامية من جدول (FE_Tbl_Version) إلى تاريخ سابق للتاريخ المخزن في قاعدة البيانات . *************************************************************** هذا كل شيء ولا تنسوا أن تنوروني بآرائكم ومقترحاتكم ولا تنسوني من صالح دعواتكم 😊 :: التحميل :: FrontEnd Updator V1.0.rar
    13 points
  12. هذه طريقتي في إعادة تسمية العناصر الكثيرة دفعة واحدة في النموذج بأسماء متسلسلة مثل : ( Box2 , Box1 , ... ) هو كود وقد عملت له نموذج لتسهيل العمل .. 🙂 الكود يقوم أيضا بترتيب وتنسيق العناصر في شكل منتظم لتسهيل عملية التصميم 😊 إقرأ الملاحظات جيدا قبل أن تطبق 😉👌🏻 النموذج : النتيجة ستكون هكذ : ( من >>>> إلى ) >>>> >>>> للاستفادة من هذا النموذج .. قم بنقل النموذج لقاعدة البيانات عندك وسيتعرف تلقائيا على النماذج التي عندك 🙂 ملف التحميل : إعادة تسمية العناصر مع الترتيب بواجهة مرنة.accdb
    13 points
  13. السلام عليكم و رحمة الله اخوتى و أحبتى اعضاء منتدى اوفيسنا الحقيقة ترددت كثيرا قبل كتابة هذا الموضوع و لعدة اسابيع و لكنى اليوم قررت ان ارتدى ثوب الشجاعة و اقدم اليكم ذلك البرنامج المتواضع و الذى كلفنى جهدا ليس بالقليل و قد اوحى الى فكرته حفيدى مازن لذا قررت ان اسمى البرنامج باسمه و فكرة البرنامج هو استعراض حروف و كلمات اللغة العربية البسيطة و التى تناسب عقلية تلميذ كى جى 1 و كى جى 2 مدعوما بالصور التى قد يعرفها الطفل فى ذلك العمر ملحوظة هامة : لابد من دعم الابوين حتى يتعلم الطفل استخدام البرنامج بنفسه و الآن على بركة الله .... اليكم البرنامج ( بعد فك الضغط لا يتم استخراج اى ملف من الفولدر) Mazen.rar
    13 points
  14. السلام عليكم ورحمة الله وبركاته 🙂 اليوم بفضل الله تعلمت شي جديد وحبيت أحطه في تطبيق عملي مباشرة ً .. 😎 وفي نفس الوقت حبيت أشارككم الفائدة 😄 معلومة اليوم تتحدث عن الحدث : Form.Repaint للنموذج ويمكن كتابته هكذا Me.Repaint ووضيفته مشابهة للـ DoEvents تقريبا إلا أنه مع التجربة والمقارنة وجدته أسرع في التنفيذ . معناه الحرفي ( إعادة الرسم ) ووضيفته بشكل عام هو إظهار أي تحديثات معلقة للنموذج في أثناء تنفيذ أي حدث 😁 .. وللمزيد من المعلومات هنا ستجدون رابط الشرح من مايكروسوفت : <<< اضغط هنا >>>> المهم .. هذا تطبيقي على الحدث وتكمن في تحريك الأزرار عند الضغط عليها بشكل يضفي طابع جمالي وجديد للنماذج 🙂 ( قد لا تبين حركة الأزرار العلوية في الصورة التوضيحية .. لذلك سترونها بوضوح من خلال الملف المرفق 😁 ) وهذا شكلها في الأكواد المستخدمة : Function AnimateBtns1() Dim x As Integer Dim y As Integer For x = 1 To 6 Me("b" & x).Visible = True For y = 1 To 35 Me("b" & x).Top = Me("b" & x).Top + y Me.repaint Next y For y = 1 To 35 Me("b" & x).Top = Me("b" & x).Top - y Me.repaint Next y Me.repaint Next x End Function Function AnimateBtns2() Dim x As Integer Dim y As Integer For x = 1 To 6 For y = 1 To 35 Me("c" & x).Top = Me("c" & x).Top + y Me.repaint Next y Me.repaint Next x For x = 1 To 6 For y = 1 To 35 Me("c" & x).Top = Me("c" & x).Top - y Me.repaint Next y Next x End Function تحياتي 🙂 ✌️🌷🌹 حركة الأزرار.accdb
    13 points
  15. السلام عليكم ورحمة الله وبركاته سبق وان عملت امثلة وبرامج مصغرة ومختصرة للمبيعات والمشتريات ، ويمكن من خلال البحث في المنتدى تجدونها .وهذا العمل يختلف نوعا ما عن ما سبق . يسعدني ان ارفق اخر تطوير لعمليات البيع والشراء والمخازن ومنهجي الدائم في جميع مشاريعي هو استخدام الجدول الواحد في هذا العمل المرفق تم تحقيق التالي : 1- العمل المرفق هو زبدة النظام وان شئت نسميه المحرك الأساسي ، ويمكن ان يبنى عليه جميع التقارير التي تخطر على البال بلا استثناء 2- يشتمل على عمليات البيع وعمليات الشراء واختيار المخزن المناسب 3- يشتمل على عمليات المرتجع من المبيع او المشتريات على فرضية ان مرتجع البيع هو في الحقيقة شراء والعكس صحيح 4- امكانية البيع والشراء بالنقد والآجل 5- احتساب الضريبة في المبيعات . فقط 6- عملية تسجيل الاصناف بطريقة احترافية 7- استخراج ارصدة الاصناف حسب المخازن عند كل حركة 8- سهولة في الاستخدام ( جميع عملياتك بنقرة واحدة ) 9- المخرجات لم اعملها وانما تركتها لكم .. علما انه يمكن استخراج : - ارصدة المواد - الدائن والمدين والأرباح - الكاش والآجل للجميع او حسب كل عميل وأشياء اخرى يمكن استخراجها ستكتشفونها عند فحص وتجربة المثال اتمنى ان تجدوا فيه الفائدة .. ولا تنسوني من دعوة صالحة بظهر الغيب buyAsale1.rar
    13 points
  16. احببت ان افرد موضوعي هذا بعنوان مستقل 1-لان غالب او جميع الدروس هنا تتعامل مع واتساب ويندوز 2-وحتى يكون تطوير هذا العمل مستقلا ولا يحدث خلط بين الامثلة المثال المرفق تم تطبيقه على واتساب ويب واليكم بعض التوجيهات والملاحظات : كانت مشكلتي في محاولات سابقة انه في كل مرة يتم الارسال وفتح الواتساب ويب .. فانه يطلب ربطا جديدا بالجوال وبحمد الله توصلت الى حل هذه المشكلة التي كانت عائقا حقيقيا .. يكتفى بالارتباط مرة واحدة فقط الآن : عند كل ارسال يفتح الواتس ويب بشاشة جديدة .. فان كانت هناك نسخة مفتوحة من قبل فانه يتجاهلها وتصبح غير فعالة وهذه لا مشكلة فيها لأنه يفتح على الحساب نفسه . ارجوا من اخوتي واحبتي الذين يمرون من هنا تجربة المثال وافادتي بنتيجة التجربة ، من اجل الانتقال الى الخطوة التالية وهي ارسال المرفقات ملحوظة : المرفق sendwatsWebAll .. هو النسخة المحدثة والمطورة بعد أخذ آراء وتجارب الإخوة sendwatsWeb.mdb sendwatsWebAll.rar
    12 points
  17. مبروك الأستاذ Mohamed Hicham إنضمامك لعائلة الخبراء ,أسأل الله لك التوفيق والنجاح دائما ..وأعانك الله على هذه المسئولية الجديدة وسدد الله خطاك ..عن حق وجدارة بارك الله فيك وزادك الله من فضله
    12 points
  18. مبروك الأستاذ حسونة إنضمامك لأسرة فريق الموقع ,أسأل الله لك التوفيق والنجاح دائما ..وأعانك الله على هذه المسئولية الجديدة وسدد الله خطاك .. وأهلاً ومرحباً بك بين أخوتك من أسرة فريق المنتدى الكريم ..ويسعدنا انضمامك لفريق العمل
    12 points
  19. السلام عليكم ، أعضاء الموقع الكرام تم عمل التعديل التالي فى صلاحيات الزوار غير المسجلين بالموقع ، لذا وجب لاتنويه. منذ افتتاح الموقع فى 2003 و خاصية تنزيل المفات من المنتدى مقصورة على الأعضاء المسجلين فقط ، بينما يمكن للزوار تصفح مختلف الأقسام العامة بالموقع. الآن تم كسر هذه القاعدة ، و اتاحة تحميل الملفات لاي زائر و ان كان غير مسجل بالموقع مازال الزوار لا يستطيعون المشاركة الا بعد التسجيل بالموقع، و لكن الان يمكنهم التصفح للأقسام العامة وأن يقوموا بتنزيل الملفات دون تسجيل
    12 points
  20. السلام عليكم , الاخوة الكرام كل عام وانتم بخير بمناسبة شهر رمضان وعيد الفطر المبارك اعادهم الله علينا بالخير والبركة موضوعنا اليوم بعد غياب كما بالعنوان كيف تنفذ شاشة متطورة حتى النتيجة بالمثال افتح فورم جديد ثم قم بعمل 2 Rectangle فى الجانب والاعلى , الجانب للقائمة والاعلى كشريط للعنوان , بالنسبة للون الخلفية الخاصة بهم يمكنك عمل اللون الذى تفضله , بالنسبة للون المثال هو لون قوائم Microsoft Outlook قمت بسحبه وتطبيقه هنا , السؤال كيف تسحب لون تريده ولا تعرف درجته بالضبط ؟ يمكنك تطبيق هذه الفكرة الجديدة , هناك اداة يستخدمها مطورين الويب و المصممين لسحب الألوان بدرجاتها بدقة عالية وهذه الأداة اسمها Just color picker انظر لشكلها وللصورة قم بتنزيلها من الموقع الرسمى من هنا https://annystudio.com/software/colorpicker/ وصورتها قم بفتح الاداة وقم بالاشارة على أى لون تريده ثم اضغط على Alt+x لحفظ درجة اللون بالطريقة التى تحبها HTML او RGB وفى المثال سنستخدم الطريقتين , بالنسبة للHTML يمكنك سحب اللون بالاداة واضغط على Copy Value مع التأشير على HTML كما بالصورة قم بنسخ القيمة وفى الاكسس فى الخصائص الخاصة بأى عنصر ستجد Back Color قم باضافة رمز # قبل درجة اللون من الاداة وضعها فى الاكسس وستجد ان اللون تم تطبيقه وبالتالى قمت بأخذ لونك المفضل ويمكنك محاكاة اى تصميم لاى برنامج تحبه . ننتقل للتصميم بداية التصميم من فكرتى وتطبيقى واكوادى من البداية اللى النهاية وأتمنى دعوة بظهر الغيب بصلاح الحال , فى التصميم ستجد ان عند تحديد زر من ازرار القائمة ستقوم الايقونة بالتحرك والخط يختلف و تصبح ايقونة الزر هى الايقونة الرئيسية بالأعلى , لعمل ذلك قم بفتح الفاجيوال بيزيك وضع الاكواد التالية : Sub ReFormat(Sender As CommandButton) Me.PictureBox.Picture = Sender.Picture Me.lbl.Caption = Sender.Caption Sender.PictureCaptionArrangement = acRight Sender.FontUnderline = True End Sub شرح الكود :: المطلوب معرفة اولا الزر الذى تم ضغطه ولذلك قمت بعمل الكود السابق مع التحكم فى الزر الذى تم ضغطه كمحازاة النص والايقونة وهكذا , يمكنك زيادة حجم الخط او أي تنسيق تريده. يتم استدعاء الكود بالشكل التالى من أى زر امر : ReFormat ActiveControl تمام , طيب فى هذه الحالة التنسيق سيستمر اذا ضغطت على زر آخر وستظل الايقونة والخط بالتنسيق الذى قام الكود السابق بعمله , وبالتالى محتاجين نلغى ما قام به الكود السابق عن كل الازرار الا الزر الحالى سيحتفظ بالتنسيق الجديد . عملت الكود التالى Sub Restore() Dim ctrl As Control For Each ctrl In Me.Controls If TypeName(ctrl) = "CommandButton" Then If ctrl.Name <> ActiveControl.Name Then ctrl.PictureCaptionArrangement = acLeft ctrl.FontUnderline = False End If End If Next End Sub شرح الكود :: يقوم بالمرور على كل عناصر التحكم واذا وجدها زر سيقارن اسمها مع اسم الزر الحالى فى حالة اختلافهما يقوم بارجاع التنسيق الاصلى للزر قبل تطبيق كود التنسيق عليه , وبالتالى مع كل زر امر سيتم وضع الكود التالى Restore ReFormat ActiveControl ستجد ان هناك خط يتغير لونه مع كل ضغطة زر , هنا سنستخدم طريقة الالوان الاخرى RGB قم بسحب اللون الذى تريده بالاداة وقم بوضع اللون مثل المثال التالى : Me.Line51.BorderColor = RGB(35, 204, 183) حيث ان قيمة اللون بين الاقواس الاحمر,الاخضر,الازرق RGB . باقى TabControl متعدد الصفحات قم بانشاءه ولا تنسى بعد الانتهاء منه تحديد Style = None الخطوة الاخيرة الانتقال الى صفحات هذا الTabControl عن طريق الكود وهناك طريقتين : اذا اردت تحديد الصفحة المطلوبة والوقوف عليها يمكنك استخدام : Me.MyTabs.Pages(0).SetFocus حيث ان 0 هو رقم Index او ترتيب الصفحة فى المستعرض , وستجد عند فتح النموذج ان الصفحة 0 يتم فتحها وعند الضغط ايضاً على ايقونة المنزل سينتقل اليها . اذا اردت فتح الصفحة بدون الوقوف فيها يمكنك استخدام : Me.MyTabs.Value = 0 وستجد الطريقتين فى المثال المرفق . لا تنسى ضبط خاصية Anchor لتثبيت العناصر او مدها مع تكبير او تصغير النموذج كما فى المثال . اعتذر عن الشرح قليل التفاصيل الى حد ما ولكنى معتمد على خبرتكم . مرفق مثال به كل ما تم شرحه , دمتم بخير ستجد المثال فى اول مشاركة لأن المنتدى لم يسمح لى ان تتعدى المرفقات 4.8 ميجا . المثال مرفق Modern UI Access - Amr Ashraf.accdb قمت باضافة صغيرة لم تظهر فى الصورة المتحركة لأنها سجلت مسبقاً , عند الضغط على صورة المنزل ستعود كافة الايقونات الى مكانها الطبيعى .
    12 points
  21. السلام عليكم ورحمة الله تعالى وبركاته الشرح الاتى لا يخص الأكسس بصفة خاصة ولكن لحماية حذف القاعدة او اى ملف داخل مجلد او المجلد الذى يحتوى قاعدة البيانات بالخطأ اولا نقوم بعمل مجلد جديد ونعطيه الاسم الذى نريد على سبيل المثال نضع مجلد جديد داخل القطاع D ونعطى المجلد اسم BackDB نقوم بتحديد المسار ونقوم بنسخه فيكون D:\Test\BackDB ولو كان اسم المجلد من مقطعين مثل Back DB سوف يكون المسار نسخ المسار الى ملف نصى ونقوم بتعديله ليكون D:\Test\Back_DB بعد ذلك نقوم بفتح موجه الاومر DOS ونقوم بكتابة او لصق الامر الاتى cacls D:\Test\BackDB /P everyone:n ولو اسم المجلد من مقطعين يكون cacls D:\Test\Back_DB /P everyone:n ثم نضغط على المقتاح Enter من لوحة المقاتيح ثم نضغط على المفتاح Y من لوحة المفاتيح كما هو موضح فى الصورة بعد ذلك نغلق موجه الاوامر DOS ونذهب الى المجلد ونقوم بالضغط عليه كليك يمين ونختار Properties تظهر لنا النافذة الاتية نحدد التبويب Security ثم نضغط بعد ذلك على Advanced كما هو موضع بالصورة ثم بعد ذلك تظهر لنا النافذة الاتية نقوم بالتحديد اولا كما هو فى الخطوة رقم 1 بالصورة ثم بعد ذلك كما هو بالخطوة رقم 2 نقوم بالضغط على Edit ثم بعد ذلك تظهر لنا النافذة الاتية نقوم بالضعط على Show Advanced Permissions ثم بعد ذلك تظهر لنا النافذة الاتية 1- فى الـ Type نختار Allow 2- فى اختيارات الـ Permissions نقوم بإزالة التأشير من على الاتى Delete Delete Subfolders and files لتصبح الاعدادت كما بالشكل الاتى ثم نضغط OK الان انسخ قاعدة البيانات داخل المجلد او اى ملفات تخاف من فقدانها جرب حذف الملفات لن يتم حذفها حاول حذف القاعدة كذلك لن يتم حذفها كذلك اقتح القاعدة واضف اليها بيانات او عدل او احذف منها اى بيانات سوف تعمل القاعدة بشكل طبيعى جدا لو اردت حذف المجلد او اى شئ بداخلة فقط استخدم الامر الاتى فى موجه اوامر الـ DOS cacls D:\Test\BackDB /P everyone:f وبعد حذف ما تريد يمكنك اعادة الخطوات ان اردت ارجاع الحماية مرة اخرى انتهى الشرح دمتم فى امان الله...
    12 points
  22. السلام عليكم ورحمة الله وبركاته 🌹 درسنا اليوم عن طريقة عمل قوائم ديناميكية متحركة بأقل عدد من الأكواد وطريقة مبتكرة . 🙂 النتيجة النهائية : الشرح : تحميل الملف : Dynamic Menus.accdb
    11 points
  23. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته 🙂 درسنا اليوم عبارة عن فكرة تجميلية لقاعدة البيانات وإظهار شاشة إنتظار عند الإنتقال بين النماذج.. فكرة لمعت وحبيت أوثقها قبل أن تطير بلا عودة 😅 متابعة ممتعة 🙂 حمل المثال من المرفقات .. Waiting Screen.accdb
    11 points
  24. السلام عليكم ورحمة الله وبركاته ,, الاخوة الكرام كل عام وحضراتكم بخير موضوعنا اليوم جديد وقد يهم الكثير من مستخدمى الاكسس , من المعروف ان الاكسيس يمكنه ضغط ملف او فك ضغطه باستخدام اوامر الشل الخاصة بالويندوز كما لو انك استخدمت الخاصية الموجودة فى الصورة وفى رأيى لا يمكن الاستفادة منها بهذا الشكل وبالتالى قمت بتصميم برنامج .Net يتكامل مع برنامج الاكسيس ويقوم بالتالى : 1- ضغط ملف / مجلد وحمايته برقم سرى . 2-فك ضغط ملف مضغوط برقم سرى . نبذة عن منطق التصميم والبرمجة : كان من الطبيعى انى اقوم بانشاء جدول او اكثر فى الاكسيس لحفظ البيانات المطلوبة ومسارات الملفات واقوم بقراءتها بالبرنامج الجديد ولكن فكرت فى طريقة اكثر احترافية وهى عمل المطلوب بالكامل فى الاكسيس وتمرير المسارات والارقام السرية من متغيرات VBA الى Arguments الخاصة بالبرنامج الجديد وكانت النتيجة جيدة بفضل الله . يتم فتح البرنامج عن طريق هذا الكود : Call Shell("""" & MyApp & """ """ & Operation & """ """ & strSource & """ """ & strDest & """ """ & zipPwd & """", 1) حيث يتم تمرير نوع العملية اولا وذلك لأن البرنامج يقوم ب3 وظائف , وبالتالى نوع العملية تقوم بتوجيه البرنامج للوظيفة المطلوبة ثم بالمسارات والباسوردات الخاصة بها سواء ضغط او فك ضغط يقوم بترجمتها بمعرفته . انظر للامثلة المرفقة : مثال لضغط ملف وحمايته بباسورد بضغطة زر وبكل سهولة وسرعة : مثال لفك ضغط الملف بالمثال السابق : ملحوظة : بالنسبة للامتداد الذى يتعامل معه البرنامج هو zip فقط وبالتالى لن يصلح لباقى الصيغ . اعذرونى ملحقتش اعمل تصميم جذاب ولكن المهم الفكرة . بالاضافة الى ان اكواد VBA يمكن اختصارها وتحسينها بواسطة الاساتذة . مرفق برنامج الاكسيس + البرنامج المساعد .. طبعا الموضوع متعوب عليه المطلوب فقط دعوة فى هذه الايام المباركة جزاكم الله خير . فى انتظار آرائكم ومقترحاتكم بعد التجربة .. دمتم بخير Zip-UnZip Access Amr Ashraf.rar
    11 points
  25. السلام عليكم ورحمة الله تعالى وبركاته عندما نتحدث عن توسيط النماذج والتقارير لابد من الأخذ فى الاعتبار ان خاصية PopUp لها تأثير كبير فإن كانت PopUp = True لها أكواد تقوم بعمل التوسيط للنماذج والتقارير داخل الشاشة خاصة ولا تقوم بعملها ان كانت PopUp = False والعكس كذلك واحيانا ننسى ذكر هذا الأمر عند عرض الاكواد والامثلة ولذلك تعمل عند البعض ولا تعمل عند اخرين بل واحيانا اثناء التصميم ننسى هذا الامر ايضا ومن أجل ذلك بعد البحث المرير وترتيب الأفكار بفضل الله تعالى تم دمج الأكواد حتى تعمل تبعا للخاصية PopUp ايما كان اعدادها حتى وان نسى المستخدم ذلك الامر أوحتى إن كان لا يدرى عنه شئ المرفق الاتى ان شاء الله به حل المشكلة تماما طيب ما الفرق بين عمل الاكواد مع خاصية PopUp ان كانت PopUp = True يتم توسيط داخل الشاشة نفسها تبعا لابعاد شاشة العرض نفسها مهما اختلف مقاس الشاشة اما ان كان PopUp = False يتم التوسيط داخل اطار تطبيق الاكس نفسه الاكواد كالاتى اولا كلاس ولابد ان يكون اسم الكلاس clsAutoCenter وان احببتم تغيير الاسم فيجب تعديله فى الاكواد التى تخص الموديول بنفس الاسم الجديد اولا الكلاس : clsAutoCenter '|---01/11/2021__________________________________________________________________________________________| '|___www.officena.net_______________________|___________________________________________________________| '| | | '| __ _ | _ +-----------officena-----------+ _ | '| \ `/ | | /o) | ||||| | (o\ | '| \__`! | / / | @(~O^O~)@ | \ \ | '| / ,' `-.__________________ | ( (_ | _ ----oOo--Moh--oOo----- _ | _) ) | '| '-'\_____ U `-. | ((\ \) +/o)----------3ssam---------(o\+ (/ /)) | '| \____()-=O=O=O=O=O=[]====--) | (\\\ \_/ / \ \_/ ///) | '| `.___ ,-----,_______...-' | \ / \ / | '| / .' | \____/________Mohammed Essam________\____/ | '| / .' | | '| / .' | 01/11/2021 | '| `-' | | '|_____www.officena.net_____________________|___________________________________________________________| '|_____Thank you for visiting https://www.officena.net__________________________________________________' Option Compare Database Option Explicit Private Type RECT 'RECT structure used for API calls. Left As Long Top As Long Right As Long Bottom As Long End Type Private Type POINTAPI 'POINTAPI structure used for API calls. X As Long Y As Long End Type Private m_hWnd As Long 'Handle of the window. Private m_rctWindow As RECT 'Rectangle describing the sides of the last polled location of the window. Private Const m_ERR_INVALIDHWND = 1 Private Const m_ERR_NOPARENTWINDOW = 2 #If VBA7 Then Private Declare PtrSafe Function apiIsWindow Lib "user32" Alias "IsWindow" (ByVal hWnd As LongPtr) As Long Private Declare PtrSafe Function apiMoveWindow Lib "user32" Alias "MoveWindow" (ByVal hWnd As LongPtr, ByVal X As Long, ByVal Y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long 'Moves and resizes a window in the coordinate system of its parent window. Private Declare PtrSafe Function apiGetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hWndPtr As Long, lpRect As RECT) As Long 'After calling, the lpRect parameter contains the RECT structure describing the sides of the window in screen coordinates. Private Declare PtrSafe Function apiScreenToClient Lib "user32" Alias "ScreenToClient" (ByVal hWnd As LongPtr, lpPoint As POINTAPI) As Long 'Converts lpPoint from screen coordinates to the coordinate system of the specified client window. Private Declare PtrSafe Function apiGetParent Lib "user32" Alias "GetParent" (ByVal hWnd As LongPtr) As Long 'Returns the handle of the parent window of the specified window. #Else Private Declare Function apiIsWindow Lib "user32" Alias "IsWindow" (ByVal hWnd As Long) As Long Private Declare Function apiMoveWindow Lib "user32" Alias "MoveWindow" (ByVal hWnd As Long, ByVal X As Long, ByVal Y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long 'Moves and resizes a window in the coordinate system of its parent window. Private Declare Function apiGetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hWnd As Long, lpRect As RECT) As Long 'After calling, the lpRect parameter contains the RECT structure describing the sides of the window in screen coordinates. Private Declare Function apiScreenToClient Lib "user32" Alias "ScreenToClient" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long 'Converts lpPoint from screen coordinates to the coordinate system of the specified client window. Private Declare Function apiGetParent Lib "user32" Alias "GetParent" (ByVal hWnd As Long) As Long 'Returns the handle of the parent window of the specified window. #End If Private Sub RaiseError(ByVal lngErrNumber As Long, ByVal strErrDesc As String) 'Raises a user-defined error to the calling procedure. Err.Raise vbObjectError + lngErrNumber, "clFormWindow", strErrDesc End Sub Private Sub UpdateWindowRect() 'Places the current window rectangle position (in pixels, in coordinate system of parent window) in m_rctWindow. Dim ptCorner As POINTAPI If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then apiGetWindowRect m_hWnd, m_rctWindow 'm_rctWindow now holds window coordinates in screen coordinates. If Not Me.Parent Is Nothing Then 'If there is a parent window, convert top, left of window from screen coordinates to parent window coordinates. With ptCorner .X = m_rctWindow.Left .Y = m_rctWindow.Top End With apiScreenToClient Me.Parent.hWnd, ptCorner With m_rctWindow .Left = ptCorner.X .Top = ptCorner.Y End With 'If there is a parent window, convert bottom, right of window from screen coordinates to parent window coordinates. With ptCorner .X = m_rctWindow.Right .Y = m_rctWindow.Bottom End With apiScreenToClient Me.Parent.hWnd, ptCorner With m_rctWindow .Right = ptCorner.X .Bottom = ptCorner.Y End With End If Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Sub Public Property Get hWnd() As Long 'Returns the value the user has specified for the window's handle. If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then hWnd = m_hWnd Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Let hWnd(ByVal lngNewValue As Long) 'Sets the window to use by specifying its handle. 'Only accepts valid window handles. If lngNewValue = 0 Or apiIsWindow(lngNewValue) Then m_hWnd = lngNewValue Else RaiseError m_ERR_INVALIDHWND, "The value passed to the hWnd property is not a valid window handle." End If End Property Public Property Get Left() As Long 'Returns the current position (in pixels) of the left edge of the window in the coordinate system of its parent window. If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect Left = m_rctWindow.Left Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Let Left(ByVal lngNewValue As Long) 'Moves the window such that its left edge falls at the position indicated '(measured in pixels, in the coordinate system of its parent window). If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow apiMoveWindow m_hWnd, lngNewValue, .Top, .Right - .Left, .Bottom - .Top, True End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property '---------------------------------------------------- Public Property Get Top() As Long 'Returns the current position (in pixels) of the top edge of the window in the coordinate system of its parent window. If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect Top = m_rctWindow.Top Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Let Top(ByVal lngNewValue As Long) 'Moves the window such that its top edge falls at the position indicated '(measured in pixels, in the coordinate system of its parent window). If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow apiMoveWindow m_hWnd, .Left, lngNewValue, .Right - .Left, .Bottom - .Top, True End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property '---------------------------------------------------- Public Property Get Width() As Long 'Returns the current width (in pixels) of the window. If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow Width = .Right - .Left End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Let Width(ByVal lngNewValue As Long) 'Changes the width of the window to the value provided (in pixels). If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow apiMoveWindow m_hWnd, .Left, .Top, lngNewValue, .Bottom - .Top, True End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property '---------------------------------------------------- Public Property Get Height() As Long 'Returns the current height (in pixels) of the window. If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow Height = .Bottom - .Top End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Let Height(ByVal lngNewValue As Long) 'Changes the height of the window to the value provided (in pixels). If m_hWnd = 0 Or apiIsWindow(m_hWnd) Then UpdateWindowRect With m_rctWindow apiMoveWindow m_hWnd, .Left, .Top, .Right - .Left, lngNewValue, True End With Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If End Property Public Property Get Parent() As clsAutoCenter 'Returns the parent window as a clFormWindow object. 'For forms, this should be the Access MDI window. Dim fwParent As New clsAutoCenter Dim lngHWnd As Long If m_hWnd = 0 Then Set Parent = Nothing ElseIf apiIsWindow(m_hWnd) Then lngHWnd = apiGetParent(m_hWnd) fwParent.hWnd = lngHWnd Set Parent = fwParent Else RaiseError m_ERR_INVALIDHWND, "The window handle " & m_hWnd & " is no longer valid." End If Set fwParent = Nothing End Property ثانيا الموديول ولن يفرق اسم الموديول فى شئ '|---01/11/2021__________________________________________________________________________________________| '|___www.officena.net_______________________|___________________________________________________________| '| | | '| __ _ | _ +-----------officena-----------+ _ | '| \ `/ | | /o) | ||||| | (o\ | '| \__`! | / / | @(~O^O~)@ | \ \ | '| / ,' `-.__________________ | ( (_ | _ ----oOo--Moh--oOo----- _ | _) ) | '| '-'\_____ U `-. | ((\ \) +/o)----------3ssam---------(o\+ (/ /)) | '| \____()-=O=O=O=O=O=[]====--) | (\\\ \_/ / \ \_/ ///) | '| `.___ ,-----,_______...-' | \ / \ / | '| / .' | \____/________Mohammed Essam________\____/ | '| / .' | | '| / .' | 01/11/2021 | '| `-' | | '|_____www.officena.net_____________________|___________________________________________________________| '|_____Thank you for visiting https://www.officena.net__________________________________________________' Option Compare Database Option Explicit Private Type RECT X1 As Long Y1 As Long X2 As Long Y2 As Long End Type #If VBA7 Then Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As Long Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hDC As LongPtr) As Long Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As LongPtr, ByVal nIndex As Long) As Long #Else Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, Rectangle As RECT) As Boolean Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long #End If Private Const WU_LOGPIXELSX = 88 Private Const WU_LOGPIXELSY = 90 ' Call CenterForm(Me) ' Call CenterReport(Me) Sub CenterForm(F As Form) If F.PopUp = False Then Dim fw As New clsAutoCenter fw.hWnd = F.hWnd With fw .Top = (.Parent.Height - .Height) / 2 .Left = (.Parent.Width - .Width) / 2 End With Set fw = Nothing ElseIf F.PopUp = True Then Dim formWidth As Long, formHeight As Long Dim MaxWidth As Long, maxHeight As Long Dim ScreenWidth As Long, ScreenHeight As Long Dim formAllMarginsHeight As Long, formAllMarginsWidth As Long GetScreenResolution ScreenWidth, ScreenHeight ScreenWidth = ConvertPixelsToTwips(ScreenWidth, 0) ScreenHeight = ConvertPixelsToTwips(ScreenHeight, 0) MaxWidth = ScreenWidth * 0.6 maxHeight = ScreenHeight * 0.9 formAllMarginsHeight = F.WindowHeight - F.Section(acDetail).Height formAllMarginsWidth = F.Width formWidth = formAllMarginsWidth formHeight = formAllMarginsHeight If formHeight < F.WindowHeight Then formHeight = F.WindowHeight End If DoCmd.MoveSize (ScreenWidth - formWidth) / 2, (ScreenHeight - formHeight) / 2, formWidth, formHeight End If End Sub Sub CenterReport(R As Report) If R.PopUp = False Then Dim fw As New clsAutoCenter fw.hWnd = R.hWnd With fw .Top = (.Parent.Height - .Height) / 2 .Left = (.Parent.Width - .Width) / 2 End With Set fw = Nothing ElseIf R.PopUp = True Then Dim ReportWidth As Long, ReportHeight As Long Dim MaxWidth As Long, maxHeight As Long Dim ScreenWidth As Long, ScreenHeight As Long Dim ReportAllMarginsHeight As Long, ReportAllMarginsWidth As Long GetScreenResolution ScreenWidth, ScreenHeight ScreenWidth = ConvertPixelsToTwips(ScreenWidth, 0) ScreenHeight = ConvertPixelsToTwips(ScreenHeight, 0) MaxWidth = ScreenWidth * 0.6 maxHeight = ScreenHeight * 0.9 ReportAllMarginsHeight = R.WindowHeight - R.Section(acDetail).Height ReportAllMarginsWidth = R.Width ReportWidth = ReportAllMarginsWidth ReportHeight = ReportAllMarginsHeight If ReportHeight < R.WindowHeight Then ReportHeight = R.WindowHeight End If DoCmd.MoveSize (ScreenWidth - ReportWidth) / 2, (ScreenHeight - ReportHeight) / 2, ReportWidth, ReportHeight End If End Sub Function ConvertTwipsToPixels(lngTwips As Long, lngDirection As Long) As Long Dim lngPixelsPerInch As Long Const nTwipsPerInch = 1440 #If VBA7 Then Dim lngDC As LongPtr #Else Dim lngDC As Long #End If lngDC = GetDC(0) If (lngDirection = 0) Then lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSX) Else lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSY) End If lngDC = ReleaseDC(0, lngDC) ConvertTwipsToPixels = (lngTwips / nTwipsPerInch) * lngPixelsPerInch End Function Function ConvertPixelsToTwips(lngPixels As Long, lngDirection As Long) As Long Dim lngPixelsPerInch As Long Const nTwipsPerInch = 1440 #If VBA7 Then Dim lngDC As LongPtr #Else Dim lngDC As Long #End If lngDC = GetDC(0) If (lngDirection = 0) Then lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSX) Else lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSY) End If lngDC = ReleaseDC(0, lngDC) ConvertPixelsToTwips = (lngPixels * nTwipsPerInch) / lngPixelsPerInch End Function Private Sub GetScreenResolution(ByRef Width As Long, ByRef Height As Long) Dim R As RECT Dim RetVal As Long #If VBA7 Then Dim hWnd As LongPtr #Else Dim hWnd As Long #End If hWnd = GetDesktopWindow() RetVal = GetWindowRect(hWnd, R) Width = R.X2 - R.X1 Height = R.Y2 - R.Y1 End Sub ويتم استدعاء كود توسيط النماذج من خلال السطر الاتى فى حدث عند الفتح Call CenterForm(Me) ويتم استدعاء كود توسيط التقارير من خلال السطر الاتى فى حدث عند الفتح Call CenterReport(Me) فى حالة كانت PopUp = True يتم توسيط النماذج والتقارير فى وسط شاشة الحاسب الالى تمام تبعا لابعاد الشاشة اما فى حالة PopUp = False يتم توسيط النماذج والتقارير فى داخل اطار برنامج الاكسس نفسه والان اليكم المرفق بالمثال العملى AutoCentre.mdb
    10 points
  26. السلام عليكم تكثر الحاجة الى اخراج تقرير حسب حقول محددة يختارها المستخدم وهذا الباب تم التطرق اليه في هذا المنتدى ومن يبحث يجد الكثير .. علما اني قد استفدت واخذت من تلك المواضيع فما انا الا ناقل . ورب ناقل علم الى من هو اعلم منه . وحتى يكون هذا الموضوع مرجع مختصر لكيفية تصميم واعداد التقرير لذا عملت على اعداد مثال صغير وهو عبارة عن جدول ونموذج وتقرير اولا : عمل قائمة في النموذج يتم فيها عرض حقول الجدول عند تحميل النموذج ... وهذه الاكواد هي المسؤولة : Private Sub Form_Load() Dim dbs As DAO.Database Dim tbl As DAO.TableDef Dim sCaption As String DoCmd.Restore Set dbs = CurrentDb Set tbl = dbs.TableDefs("table1") For Each fld In tbl.Fields sCaption = "" On Error Resume Next sCaption = fld.Properties("Caption") On Error GoTo 0 lstFields.AddItem fld.Name & ";" & sCaption Next fld Set dbs = Nothing Set tbl = Nothing End Sub ثانيا عملت زر لإعداد الحقول في التقرير ثم فتحه ، وخلف هذا الزر يتم تنفيذ هذه الشفرة Dim i As Integer Dim txt As TextBox Dim lbl As Label Dim intSelectedCount As Integer Dim lngWidth As LoadPictureConstants Dim intSelectedNo As Integer With lstFields If .ItemsSelected.Count = 0 Then MsgBox "يجب اختيار حقل واحد على الأقل", vbExclamation, "خطأ" Exit Sub End If DoCmd.OpenReport "Rep1", acViewDesign, , , acHidden intSelectedCount = .ItemsSelected.Count lngWidth = Reports("Rep1").Width / intSelectedCount Reports("Rep1").Section("PageHeaderSection").Height = 310 Reports!Rep1!Label2.Caption = Nz(Me.Textlabl) Reports("Rep1").Section("Detail").Height = 310 intSelectedNo = 0 For i = 0 To .ListCount - 1 If .Selected(i) Then Set lbl = CreateReportControl("Rep1", acLabel, acPageHeader, , , intSelectedNo * (lngWidth + 50), 5, lngWidth, 300) lbl.Caption = .Column(1, i) lbl.BackStyle = 1 lbl.BackColor = RGB(200, 200, 200) lbl.BorderStyle = 1 lbl.FontBold = True lbl.TextAlign = 2 Set txt = CreateReportControl("Rep1", acTextBox, acDetail, , .Column(0, i), intSelectedNo * (lngWidth + 50), 5, lngWidth, 300) txt.BorderStyle = 1 txt.TextAlign = 2 intSelectedNo = intSelectedNo + 1 End If Next i End With DoCmd.OpenReport "Rep1", acViewReport ملحوظات : جعلت زر الخروج في التقرير يغلق التقرير ( من غير حفظ ) متجاوزا رسالة تأكيد الحفظ حفظ التقرير يسبب تراكم الحقول المصنوعة داخل الكود .. ومن ثم تظهر المشكلات والأخطاء ختاما لا تنسوني من دعواتكم الصالحة واتمنى ان تجدوا فيه الفائدة والمتعة اختيار حقول التقرير.rar
    10 points
  27. السلام عليكم ورحمة الله وبركاته يسرني اليوم أن أقدم لكم هذه الهدية المتميزة والرائعة (مكتبة الأكواد الخاصة) :: الإصدار الثالث :: مكتبة عامرة بمئات الأكواد VBA داعمة للمبرمجين وجزء لا يتجزأ من عملهم. تختصر الوقت وتسهل العمل على مصممي البرامج. وهي مكتبة عامة يمكن استخدامها لأي لغات برمجية أخرى . من مميزات المكتبة : - أكثر من 360 كود ودالة في مختلف الفنون والمجالات . - قابلة لحفظ مرفقات مع الكود لدعم التطبيق. - يمكنك إضافة أكوادك الخاصة لتكون مكتبة داعمة لكل مبرمج. - سهلة الاستخدام . تحميل المكتبة : مكتبة الأكواد الخاصة zip.zip ولا تنسوني من صالح دعواتكم 🙂🌹
    10 points
  28. السلام عليكم 🙂 اذا عندنا تقرير بهذه الطريقة: . اليس الافضل دمج بيانات الحقل المتكررة عموديا في حقل واحد ، مثل الوورد مثلا الى : . طريقة العمل : 1. اعمل تقريرك بالطريقة اللي تراها مناسبة ، بالفرز والتصفية : . او بالمجاميع : . 2. ولكن قم بوضع جميع الحقول في قسم "التفصيل" Detail : . 3. ثم اجعل برواز جميع حقول هذا القسم شفافة . 4. ثم الحقول التي تريد دمجها ، اخفاء المتكرر = نعم ، Hide Duplicates = Yes . 5. ثم ضع هذه الاحداث للتقرير Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) 'Border color not set, use field ForeColor Call Detail_Print_Run_All(5, "'اليوم', 'التاريخ','الزمن'") End Sub Private Sub Report_Open(Cancel As Integer) Call Report_Open_Run(Me.Name) End Sub Private Sub Report_Close() On Error Resume Next Set ctl_ReSize = Nothing End Sub Private Sub Report_Page() Call Report_Page_Run End Sub . 6. لا تحتاج الى عمل اي تغيير في الاحداث اعلاه ، فقط انسخها من هنا والصقها في تقريرك ، ما عدا اول جزء : عرض البرواز ، حيث نخبره باسماء الحقل/الحقول التي نريد دمجها عموديا ، لون البرواز يكون حسب اللون الذي نكتبه ، او اذا لم نكتب لون البرواز ، فلون البرواز سيكون لون نص الكلمات في الحقل . 7. نسخ الوحدة النمطية mod_Report_Field_Hieght_ReSize الى تقريرك ن وكذلك بدون عمل اي تغيير فيها : Option Compare Database Option Explicit Dim rpt_Name_ReSize As String Dim rgb_Border_ReSize As Long, ini_rgb_Border_ReSize As Long Dim Detail_Calc_Height_ReSize As Long Dim Exclude_fld_Name_ReSize As String Dim Add_H_Each_Record_ReSize As Boolean Dim fildMaxHeight_ReSize As Long Dim myDrawWidth As Integer Public ctl_ReSize As Control Dim i_ReSize As Integer, j_ReSize As Integer Dim x_ReSize() As String, tmp_ReSize As String Dim Count_Pages_ReSize As Integer Dim sfld_Name_ReSize() As String, sfld_Value_ReSize() As String, _ sfld_Count_ReSize() As Integer Dim L_ReSize As Single, T_ReSize As Single, W_ReSize As Single, H_ReSize As Single ' Function Detail_Print_Run_All(LineWidth As Integer, myFields As String, Optional border_Color As Long = 1) 'we can this Function in the following ways, indicating Border Color 'Call Detail_Print_Run_All(5, "'c1', 'save', 'b1'", RGB(0, 0, 0)) 'Border color is RGB Value 'Call Detail_Print_Run_All(5, "'c1', 'save', 'b1'", vbBlack) 'Border color is Black 'Call Detail_Print_Run_All(5,"'c1', 'save', 'b1'", vbMagenta) 'Border color is Magenta 'Call Detail_Print_Run_All(5,"'c1', 'save', 'b1'") 'Border color not set, use field ForeColor 'Call Detail_Print_Run_All(5,"'b1'", RGB(0, 0, 0)) '5 is Line Width 'we get most the Lines drawn in Detail Section, 'except for the Last Record in each page, where we use Report Page event (the last page is easy) ini_rgb_Border_ReSize = border_Color rgb_Border_ReSize = ini_rgb_Border_ReSize Exclude_fld_Name_ReSize = myFields Add_H_Each_Record_ReSize = False myDrawWidth = LineWidth 'make an array of the fields x_ReSize = Split(Exclude_fld_Name_ReSize, ",") ReDim Preserve sfld_Name_ReSize(UBound(x_ReSize)) ReDim Preserve sfld_Value_ReSize(UBound(x_ReSize)) ReDim Preserve sfld_Count_ReSize(UBound(x_ReSize)) '1 'do the Detail Lines for the remaining fields Call Detail_Sec_Max_Height '2 'now work on the special fields Lines For i_ReSize = 0 To UBound(x_ReSize) 'remove the ' , and the extra spaces from the Left and Right tmp_ReSize = RTrim(LTrim(Replace(x_ReSize(i_ReSize), "'", ""))) sfld_Name_ReSize(i_ReSize) = tmp_ReSize Call Scale_Box_Lines(tmp_ReSize) Next i_ReSize End Function Function Report_Open_Run(rpt_Name_ReSize_1) rpt_Name_ReSize = rpt_Name_ReSize_1 'Reset the variables from here Count_Pages_ReSize = 0 Erase sfld_Name_ReSize Erase sfld_Value_ReSize Erase sfld_Count_ReSize Detail_Calc_Height_ReSize = 0 End Function Function Report_Page_Run() 'make an array of the fields x_ReSize = Split(Exclude_fld_Name_ReSize, ",") 'now work on the special fields Lines For j_ReSize = 0 To UBound(x_ReSize) 'remove the ' , and the extra spaces from the Left and Right tmp_ReSize = RTrim(LTrim(Replace(x_ReSize(j_ReSize), "'", ""))) sfld_Name_ReSize(j_ReSize) = tmp_ReSize Set ctl_ReSize = Reports(rpt_Name_ReSize)(tmp_ReSize) If ini_rgb_Border_ReSize = 1 Then rgb_Border_ReSize = ctl_ReSize.ForeColor End If 'make it simple to understand L_ReSize = ctl_ReSize.Left W_ReSize = ctl_ReSize.Width T_ReSize = ctl_ReSize.Top 'H_ReSize = ctl_ReSize.Height 'we have to add the Sections/Fields ABOVE the Detail Section If Reports(rpt_Name_ReSize).Page = 1 Then H_ReSize = Detail_Calc_Height_ReSize + _ Reports(rpt_Name_ReSize).PageHeaderSection.Height + _ Reports(rpt_Name_ReSize).ReportHeader.Height Else H_ReSize = Detail_Calc_Height_ReSize + _ Reports(rpt_Name_ReSize).PageHeaderSection.Height End If Reports(rpt_Name_ReSize).DrawWidth = myDrawWidth Reports(rpt_Name_ReSize).Line (L_ReSize, T_ReSize + H_ReSize)-(L_ReSize + W_ReSize, T_ReSize + H_ReSize), rgb_Border_ReSize 'Bottom Line Next j_ReSize Detail_Calc_Height_ReSize = 0 End Function Public Function Scale_Box_Lines(fld_Name As String) Set ctl_ReSize = Reports(rpt_Name_ReSize)(fld_Name) 'make it simple to understand L_ReSize = ctl_ReSize.Left W_ReSize = ctl_ReSize.Width T_ReSize = ctl_ReSize.Top H_ReSize = ctl_ReSize.Height If ini_rgb_Border_ReSize = 1 Then rgb_Border_ReSize = ctl_ReSize.ForeColor End If 'take the highst Height If fildMaxHeight_ReSize > H_ReSize Then H_ReSize = fildMaxHeight_ReSize End If If ctl_ReSize.Text <> sfld_Value_ReSize(i_ReSize) Then sfld_Value_ReSize(i_ReSize) = ctl_ReSize.Text sfld_Count_ReSize(i_ReSize) = 1 End If 'Box the cells 'Left and Right ctl_ReSize.BorderColor = vbWhite Reports(rpt_Name_ReSize).DrawWidth = myDrawWidth Reports(rpt_Name_ReSize).Line (L_ReSize, T_ReSize)-(L_ReSize, H_ReSize), rgb_Border_ReSize 'Left Line Reports(rpt_Name_ReSize).Line (L_ReSize + W_ReSize, T_ReSize)-(L_ReSize + W_ReSize, H_ReSize), rgb_Border_ReSize 'Right Line 'Top and Bottom If Reports(rpt_Name_ReSize).Page <> Count_Pages_ReSize Then 'first Count_Pages_ReSize = Count_Pages_ReSize + 1 Reports(rpt_Name_ReSize).Line (L_ReSize, T_ReSize)-(L_ReSize + W_ReSize, T_ReSize), rgb_Border_ReSize 'Top Line ElseIf sfld_Count_ReSize(i_ReSize) = 1 Then 'First Record Reports(rpt_Name_ReSize).Line (L_ReSize, T_ReSize)-(L_ReSize + W_ReSize, T_ReSize), rgb_Border_ReSize 'Top Line End If sfld_Count_ReSize(i_ReSize) = sfld_Count_ReSize(i_ReSize) + 1 End Function Public Function Detail_Sec_Max_Height() fildMaxHeight_ReSize = 0 'get the max Height For Each ctl_ReSize In Reports(rpt_Name_ReSize).Section(0).Controls If ctl_ReSize.Height > fildMaxHeight_ReSize Then fildMaxHeight_ReSize = ctl_ReSize.Height End If Next 'Draw lines around the fields For Each ctl_ReSize In Reports(rpt_Name_ReSize).Section(0).Controls If InStr(Exclude_fld_Name_ReSize, "'" & ctl_ReSize.Name & "'") = 0 Then Reports(rpt_Name_ReSize).DrawWidth = myDrawWidth Reports(rpt_Name_ReSize).Line (ctl_ReSize.Left, ctl_ReSize.Top)-Step(ctl_ReSize.Width, fildMaxHeight_ReSize), ctl_ReSize.ForeColor, B 'just add the Heighs of ONE Record If Add_H_Each_Record_ReSize = False Then Detail_Calc_Height_ReSize = Detail_Calc_Height_ReSize + fildMaxHeight_ReSize Add_H_Each_Record_ReSize = True End If End If Next End Function . 8. ما عدا هذا الجزء ، والذي يجب ان نضع فيه اسماء جميع الاقسام التي فوق "قسم التفصيل" ، والتي بها ارتفاع : . من هنا نعرف اسم هذه الاقسام : . وهذه نتائج بعض التقارير التي تم النجربة عليها : . . . . ولم اتوصل لطريقة لجعل الكلمات في منتصف الحقل عموديا ، هكذا: جعفر Report_BoxLine_07.accdb.zip
    10 points
  29. بسم الله الرحمن الرحيم كما تعودنا واستكمالا لشروحات الفورم التفاعلي باضافات بعض الحيل والافكار للوصول لشكل يسهل للمستخدم التعامل مع اليوزفورم النهاردة هانتعلم الذاي نعمل قائمة منسدلة لجميع تبويات الفورم من خلال بعض الاعدات في شيت منفصل بعيدا عن تعقيدات الاكواد وتكرارها باستخدام Class Modules كود واحد ومختصر وقائمة واحدة تتغير حسب التبويب كنت وعد احد الاخوة في موضوع الدرس الأول للفورم التفاعلي الاخ اسامة فوزي واحتياجه لفورم متعدد المهام والوظائف ليطور عمله ففضلت ان تكون الاجابة عامة حتى يستفيد منها الجميع وادعوا الله ان اكون عند حسن ظنه وظنكم في. أطروحتنا النهاردة بسيطة وشيقة اشبه بمغامرة انك تعبر عن قدرتك وتعاملك في التصميم والكود كانك رسام يرسم لوحة وبربط بين تفاصيلها لتعبر عن رؤية بصرية محددة في مخيلة من قام بالرسم وحياكة التفاصيل حياكة متناسقة لتصل الي المتلقي بسهولة ويستطيع ان يتعامل معها ويمكنك تغيير المسميات للقوائم المنسدلة او الرئيسية من خلال شيت الاعدادات بكل سهولة وتضيف كما تشاء من تبويات بكل سهولة اسيبكم مع الملف واي شيء يحتاج لشرح او توضيح لا تتردوا في طلبه والله ولي التوفيق Create Dynamic Drop-Down Menu In Excel Userform الملف بالمرفقات مفتوح المصدر Create Dynamic Drop-Down Menu In Excel Userform Officana.xlsm
    10 points
  30. Generate PDF Dahy VBA Skills fun موضوعنا النهاردة موضوع شيق مدخل للدرس الثالث للفورم التفاعلي وفي نفس الوقت ها نتعرف فيه علي أدوات ها توفر الوقت والمجهود لشريحة كبيرة تستخدم قالب معين مثل الموارد البشرية لما ترسل طلبات التوظيف المالية لمطابقات كشوف الحساب للموردين واحنا داخلين علي موسم الجرد الختامي والبنوك او الشركات او المواقع التي ترسل رسائل دورية وما الي ذلك انا اخترت المثال علي شئون الموظفين وطلبات التوظيف وهانتعرف علي كيفية التعديل علي النموذج Word عن طريق الفورم عناصر الدرس ملف Templet word القالب المستخدم اداة Microsoft Outlook 16.0 Object Library أداة Microsoft Word 16.0 Object Library ونتعلم مع بعض VBA Dynamic Code وكيفية عمل ملف PDF وارساله بالايميل الشرح نقوم بإضافة الأدوات في الفيجوال كما يلي من Tools نختار References Microsoft Outlook 16.0 Object Library اضافة أداة Microsoft Word 16.0 Object Library تحديد مسار القالب كما يلي شفت + كليك يمين علي ملف الوورد ثم نختار Copy as Path حسب موقع الملف علي جهازك انا عندي في برتيشن F "\F:\GeneratePDF\Template_Contract.docx" تحديد مسار حفظ ملفات PDF الذي يحفظها البرنامج F:\Generate and Preview طبعا يلي مش عارف يغير في الكود يقوم بحفظ الملف المرفق علي برتيشين الFبعد فك الضغط مباشرة . ملف الورد يلي نستخدمه كقالب ولاحظ المسميات يلي انت ظللتها بالاصفر نفس مسميات الليبل ف الفورم وضعتها بين علامتي ##لانها بيانات متغيرة سيتم اضافاتها من الفورم لاحظ معي عند استدعاء الملف بالورد شاهد النتيجة البرنامج اضاف البيانات المظلله بشكل تلقائي الوظيفة الثانية للبرنامج اني ببعت الملف بالايميل من البرنامج لتوفير الوقت والوظيفة في حالة التقارير الدورية او النشرات او حسب استخدام الفرد الذي يحتاج ارسال عدد كبير في نفس الوقت مع ملاحظة انه بشكل تلقائي بياخد الايميل من الفورم ويضيف اسم الموضوع والمرفقات كما بالكود بشكل تلقائي طبعا الشرح موجز لاهم العناصر انا برفق مع الشرح مثال عملي منه للشرح ومنه نستفيد منه او من الافكار يلي فيه وبكون منتظر حد يسال عن اي شئ داخل الملف بصدر رحب لكن للاسف كعادتنا نحفظ في الارشيف علي اية حال الملف بالمرفقات واي استفسار لا تترد كلنا بنتعلم مع بعض شارك وتفاعل انت تسال وذلك يسال واخر يجيب وكلنا هانستفيد الدرس القادم ان شاء الله هاشرح الاكواد ونتعرف علي كود الحغظ والتعديل والبحث الديناميكي لضمان عمل الملف اتبع الشرح السابق في اضافة الادوات ومسار الملف وبالتوفيق للجميع ولا تنسونا من دعائكم بظهر الغيب بصلاح الحال GeneratePDF.rar
    10 points
  31. السلام عليكم ورحمة الله تعالى وبركاته احيانا نريد عمل معرف خاص بنا برمجيا طبعا يختلف الكود تبعا لاسم الجدول والحقل ونوع الحقل اليوم سوف اقدم لكم فكرتى المتواضعة فى تلك الوظيفة التى يمكن وضعها فى وحدة نمطية ليمكن -استدعاؤها فى زوايا التطبيق المختلفة بكل سهولة -امكانية التحكم اثناء استدعاء الوظيفة فى البادئة ان اردت اضافة بادئة ما -التحكم فى موعد اعادة التعيين ليبدأ العدد من الرقم 1 مرة أخرى سنويا او شهريا او يوميا الكوووووود '|---10/04/2022______________________________________________| '|___www.officena.net________________________________________| '| | '| _ +-----------officena-----------+ _ | '| /o) | ||||| | (o\ | '| / / | @(~O^O~)@ | \ \ | '| ( (_ | _ ----oOo--Moh--oOo----- _ | _) ) | '| ((\ \) +/o)----------3ssam---------(o\+ (/ /)) | '| (\\\ \_/ / \ \_/ ///) | '| \ / \ / | '| \____/________Mohammed Essam________\____/ | '| | '| 10/04/2022 | '| | '|_____www.officena.net______________________________________| '|_____Thank you for visiting https://www.officena.net_______| '======Control in Special increment prefix ID===============================================================================================================================' ' ____ __ ____ ____ __ ____ ____ __ ____ ______ _______ _______ __ ______ _______ .__ __. ___ .__ __. _______ .___________. ' ' \ \ / \ / / \ \ / \ / / \ \ / \ / / / __ \ | ____|| ____|| | / || ____|| \ | | / \ | \ | | | ____|| | ' ' \ \/ \/ / \ \/ \/ / \ \/ \/ / | | | | | |__ | |__ | | | ,----'| |__ | \| | / ^ \ | \| | | |__ `---| |----` ' ' \ / \ / \ / | | | | | __| | __| | | | | | __| | . ` | / /_\ \ | . ` | | __| | | ' ' \ /\ / \ /\ / \ /\ / __| `--' | | | | | | | | `----.| |____ | |\ | / _____ \ __| |\ | | |____ | | ' ' \__/ \__/ \__/ \__/ \__/ \__/ (__)\______/ |__| |__| |__| \______||_______||__| \__| /__/ \__\ (__)__| \__| |_______| |__| ' ' ' '===========================================================================================================================================================================' Function MySpid( _ ByRef strFieldName As String, _ ByRef strTableName As String, _ Optional strPrefixe As String = vbNullString, _ Optional strResetYYorMMorDD As String = "YY", _ Optional nDay As Integer = 0, _ Optional nMonth As Integer = 0, _ Optional nYear As Integer = 0) As String Dim strLinkCriteria As String Dim strOldID As String Dim strNxtID As Long Dim intLenPrefixe As Integer Const intNumberOfZeros = 6 intLenPrefixe = Len(strPrefixe) + 1 If nDay = 0 Then nDay = Format(Date, "dd") If nMonth = 0 Then nMonth = Format(Date, "mm") If nYear = 0 Then nYear = Year(Date) - 2000 Select Case strResetYYorMMorDD Case Is = "YY": strLinkCriteria = Nz(Right(Mid(Nz(DLast(strFieldName, strTableName), 0), intLenPrefixe, 6), 2), 0) = nYear ' Yearly Reset Case Is = "MM": strLinkCriteria = Nz(Right(Mid(Nz(DLast(strFieldName, strTableName), 0), intLenPrefixe, 4), 2), 0) = nMonth ' Monthly Reset Case Is = "DD": strLinkCriteria = Nz(Right(Mid(Nz(DLast(strFieldName, strTableName), 0), intLenPrefixe, 2), 2), 0) = nDay ' Daily Reset End Select strOldID = Nz(DLast("" & strFieldName & "", strTableName, strLinkCriteria), 0) strNxtID = CLng(Right(strOldID, intNumberOfZeros)) strNxtID = strNxtID + 1 MySpid = strPrefixe & Format(nDay, "00") & Format(nMonth, "00") & Format(nYear, "00") & _ String(intNumberOfZeros - Len(CStr(strNxtID)), "0") & CStr(strNxtID) End Function يتم استدعاء الوظيقة بشكل عام من خلال الكود الاتى MySpid("FldName", "TblName") فى هذه الحالة يتم اعادة تعيين الترقيم سنويا ------------ ولكن للتحكم الكامل ولتغيير الاعدادات MySpid("FldName", "TblName", "AnyPrefixe", "yy or MM OR DD","DayDate","MonthDate","YearDate") AnyPrefixe البادئة التى تريد أن تبدأ الترقيم بها غيرها كما تريد MySpid("FldName", "TblName", "AnyPrefixe") yy or MM OR DD لو اردت اعادة تعيين الترقيم سنويا سوف تكون yy وبدون استخدام هذا الجزء هذا هو الاحتيار المفضل تبعا للكود MySpid("FldName", "TblName", "AnyPrefixe", "yy") لو اردت اعادة تعيين الترقيم شهريا سوف تكون MM MySpid("FldName", "TblName", "AnyPrefixe", "MM") لو اردت اعادة تعيين الترقيم يوميا سوف تكون DD MySpid("FldName", "TblName", "AnyPrefixe", "DD") --------- DayDate لتبدأ الترقيم من خلال رقم يوم محدد يعنى مثلا لو اردنا الترقيم يبدا من يوم 23 MonthDate لتبدأ الترقيم من خلال رقم شهر محدد يعنى مثلا لو اردنا الترقيم يبدا من شهر 09 YearDate لتبدأ الترقيم من خلال رقم سنه محدد يعنى مثلا لو اردنا الترقيم يبدا من عام 21 اجمل الامنيات بالاستمتاع مع هذا الكود وهذه الافكار هذا الاصدار الاول من كتابتى للكود لم اتمكن من التجربة بشكل كبير.. فضلا وكرما موافاتنا بالنتيجة فى حالة حدوث اى خطأ Special increment prefix ID.accdb
    10 points
  32. السلام عليكم 🙂 هذا المنتدى للتبادل العلمي ، حتى يستفيد منه الجميع ، وليس صاحب الموضوع / السؤال فقط 🙂 فيا ريت ان نضع الاجابة بالتفصيل في الرد (سواء الخطوات او الكود او صور من شاشة البرنامج) ، ولا نتوقف عند ارفاق المرفق الذي به الرد / الجواب ، والسبب هو ، حتى يستطيع الجميع رؤية الرد ومعرفته مباشرة ، دون اللجوء الى انزال المرفق وفهمه 🙂 نعم ، هذا عبء إضافي ، ولكن نتائجه ستكون مثمرة ان شاء الله 🙂 وتذكروا ، هذا مجرد طلب ورجاء ، وليس اجباري 🙂 شكرا جزيلا 🙂 جعفر
    10 points
  33. السلام عليكم و رحمة الله و بركاته المرفق يحتوي على كل ما يحتاجه المبرمج و يستحق الإكتشاف أفكار جديدة و رائعة , الملف منقول للأمانة تقبلوا تحياتي VBA Task Dial.accdb
    10 points
  34. السلام عليكم ورحمة الله وبركاته أسعد الله أوقاتكم بكل خير وسرور .. وتقبل الله منا ومنكم صالحات الأعمال .. 😊🤲🏻 يطيب لي أن أقدم لكم هذا الهدية المتواضعة بمناسبة هذا الشهر الفضيل 🙂🌼🎁 استبدل الرسائل العادية في أكسس برسائل ذات تصاميم قمة في الإبداع وبمميزات إضافية . من مميزات هذه الرسائل: - تصميم جميل وألوان جذابة. - خاصية ذاتية الاختفاء. - عنوان رئيسي + عنوان فرعي - تحكم بالنص ( عربي - إنجليزي ) ( توسيط - محاذاة على اليمين أو اليسار) - سهلة الاستخدام . الشرح على اليوتيوب : التحميل 🙂 Moosak MsgBox.accdb ولا تنسوني من صالح دعواتكم 😊🌷🌼🌹
    9 points
  35. السلام عليكم ورحمة الله وبركاته ، أخواني وأساتذتي ومعلمينا ( دون استثناء ) اليوم جئتكم بفكرة جديدة وأعتقد أنه لم يسبقني أحد بهذا الطريق ؛ وهو إضافة اختيار واجهة اللغة إلى تطبيقات وبرامج ومشاريع الآكسيس بطريقة جديدة وتقدروا تقولوا 2024 في البداية سأقوم بشرح المطلوب داخل القاعدة التي سيتم التطبيق عليها ، أولاً :- جدول واحد فقط يحتوي على حقل واحد فقط أيضاً وسنسميه بـ SettingsTable ، والحقل الذي بداخله هو Language من نوع نصي ( Text ) . ثانياً :- نموذج Settings وهو طبعاً ليس له مصدر سجلات . وبداخله كومبوبوكس Combo box سيكون اسمه cboLanguage نوع مصدر بياناته Value List ؛ ومصدر بياناته القيم التالية ( "العربية";"English" ) . ثالثاً :- بجانب قاعدة البيانات سنقوم بإنشاء مجلد جديد وسيتم تسميته بـ Language . الآن خطوات العمل :- الموديول Module :- قم بإنشاء Module جديد وسمه بـ Set_Language ؛ وهو مفتاح العمل والذي من خلاله سنعتمد على جلب الترجمة من الملفات التي سنقوم بإنشائها لاحقاً . وهذا الكود مع الشرح الكامل له بين السطور . Option Compare Database Option Explicit ' المتغير العام لتخزين اللغة الحالية Public CurrentLanguage As String ' تحديث اللغة الحالية Public Sub UpdateLanguage() On Error Resume Next ' احصل على اللغة المحددة من جدول الإعدادات CurrentLanguage = DLookup("Language", "SettingsTable") ' قم بتحديث العلامات في جميع النماذج UpdateLabelsInAllForms End Sub ' تحديث العلامات في جميع النماذج Private Sub UpdateLabelsInAllForms() Dim frm As AccessObject ' تحديث العلامات في جميع النماذج المحملة For Each frm In CurrentProject.AllForms If frm.IsLoaded Then UpdateLabelsInForm Forms(frm.Name) End If Next frm End Sub ' تحديث العلامات في نموذج محدد Private Sub UpdateLabelsInForm(frm As Object) Dim arFile As String, enFile As String Dim arLabels() As String, enLabels() As String Dim i As Integer ' احصل على ملف اللغة العربية واللغة الإنجليزية arFile = GetLanguageFilePath("Arabic.txt") enFile = GetLanguageFilePath("English.txt") ' اقرأ الملفات واملأ المصفوفات بالنصوص المترجمة arLabels = Split(ReadFile(arFile), vbCrLf, -1) enLabels = Split(ReadFile(enFile), vbCrLf, -1) ' قم بتحديث العلامات في النموذج For i = 0 To UBound(arLabels) UpdateLabel frm, "Label" & CStr(i + 1), arLabels(i), enLabels(i) UpdateLabel frm, "Command" & CStr(i + 1), arLabels(i), enLabels(i) Next i End Sub ' احصل على مسار قاعدة البيانات الحالية Private Function GetDatabasePath() As String Dim dbPath As String dbPath = CurrentDb.Name GetDatabasePath = Left(dbPath, InStrRev(dbPath, "\")) End Function ' احصل على مسار ملف اللغة Private Function GetLanguageFilePath(fileName As String) As String GetLanguageFilePath = GetDatabasePath() & "Language\" & fileName End Function ' اقرأ ملف النص وارجع النص كنص نصي Private Function ReadFile(filePath As String) As String Dim fileNumber As Integer fileNumber = FreeFile Open filePath For Input As fileNumber ReadFile = Input$(LOF(fileNumber), fileNumber) Close fileNumber End Function ' تحديث علامة محددة في النموذج بناءً على اللغة الحالية Private Sub UpdateLabel(frm As Object, labelName As String, arabicText As String, englishText As String) On Error Resume Next ' قم بتحديث العلامة بناءً على اللغة الحالية frm.Controls(labelName).Caption = IIf(CurrentLanguage = "العربية", arabicText, englishText) On Error GoTo 0 End Sub * ملاحظة :- سنعتمد هنا على طريق بسيط جداً وهو المسميات في النماذج ، فمثلاً لو انشأنا زر في نموذج ما وكانت تسميته Caption هي حفظ وكان اسم الزر Command1 ؛ فعند الترجمة سيصبح كل زر في البرنامج باسم Command1 هو بمثابة زر الحفظ وستكون ترجمته Save ؛ لذا سنعتمد طريقة توحيد المسميات في النماذج وهذا سيجعل الأمر سهلاً جداً للصيانة ، وطبعاً لا يمكن أن يكون لعنصرين ( كائنين ) في النموذج لهما نفس الإسم . رابعاً :- العودة إلى نموذج Settings الذي تم التحدث عنه في النقطة ( ثانياً ) ؛ سنقوم بدايةً باستكمال إنشاء الأكواد الخاصة بتغيير اللغة ، قبل الأحداث للـ Combo Box والنموذج . سنقوم بإدراج هذه الأكواد الثلاثة البسيطة :- ' تحديث العناصر في النموذج بناءً على اللغة المختارة Private Sub UpdateLanguageForControls() On Error Resume Next Dim ctrl As AccessObject For Each ctrl In Me.Controls ' يمكنك هنا إضافة العناصر الأخرى التي تريد تحديثها بناءً على اللغة ' مثلا: If TypeOf ctrl Is ComboBox Then Next ctrl End Sub ' حفظ اختيار اللغة في جدول SettingsTable Private Sub SaveLanguageChoice() CurrentDb.Execute "UPDATE SettingsTable SET Language='" & Me.cboLanguage & "'" End Sub ' تغيير اللغة وتحديث العناصر ذات الصلة Private Sub ChangeLanguage(selectedLanguage As String) CurrentDb.Execute "UPDATE SettingsTable SET Language='" & selectedLanguage & "'" UpdateLanguageForControls End Sub وفي حدث عند الفتح للنموذج سنقوم بإدراج هذا الكود :- ' حدث يتم تنفيذه عند فتح النموذج Private Sub Form_Open(Cancel As Integer) UpdateLanguage End Sub وفي حدث عند التحديث للكومبوبوكس سندرج الكود التالي :- ' حدث يتم تنفيذه بعد تحديث اختيار اللغة من ComboBox Private Sub cboLanguage_AfterUpdate() Dim response As VbMsgBoxResult Dim Language As String ' احصل على اللغة المحددة من ComboBox Language = Me.cboLanguage.Value ' قم بتحديد الرسالة بناءً على اللغة المختارة If Language = "العربية" Then response = MsgBox("هل ترغب في تغيير اللغة إلى العربية؟", vbQuestion + vbYesNo, "التأكيد") ElseIf Language = "English" Then response = MsgBox("Do you want to change the language to English?", vbQuestion + vbYesNo, "Confirmation") End If ' قم باتخاذ الإجراء المناسب بناءً على رد المستخدم If response = vbYes Then SaveLanguageChoice Application.Quit Else SaveLanguageChoice DoCmd.Close End If End Sub الآن نأتي لأهم نقطة في هذا الموضوع ، ألا وهي . أين ستكون الترجمة ؟ طبعاً قمنا سابقاً بإنشاء المجلد Language بجانب قاعدة البيانات ، الآن سنذهب إليه وسنقوم بإنشاء ملفين نصيين Text الأول Arabic.txt ، والثاني English.txt . في الأعلى افترضنا انه لدينا في النموذج زر اسمه Command1 والـ Caption له كانت حفظ ، الآن سنقوم بكتابة المسمى بالعربي وهو حفظ في ملف النص Arabic ، وفي الملف الثاني English سنكتب Save وهو أول أمر قمنا به كتجربة ( لاحظ أن Command يتبعها الرقم 1 ) وعليه فأن أي مسمى Command1 في أي نموذج سيكون اسمه حفظ أو Save عند اختيار الإنجليزية . وفي النهاية سأترك مرفق يحتوي تطبيق لما تحدثنا به سابقاً . والمتابعة لأي استفسار أو توضيح Change Language.zip
    9 points
  36. بمتابعة مشرفي الموقع واخص مدير الموقع @محمد طاهر عرفه و زملائي @Moosak و @ابو جودي نهنىء انفسنا ومرتادي هذا المنتدى بخبراء جدد الأستاذ @عمر ضاحى والأستاذ @Foksh الف مبروك ..
    9 points
  37. السلام عليكم ورحمة الله وبركاته اليكم برنامج الجرد خاص بالمصالح الاقتصادية دمتم في رعاية الله وحفظه. برنامج الجرد العام 2022 (2).rar
    9 points
  38. برنامج أرشفة 1- الملفات والمرفقات والمجلدات 2- البرامج المساعدة ومرفقاتها أرجو ابداء رأيكم به ArchiveMyFiles-Folders.rar
    9 points
  39. السلام عليكم ورحمة الله وبركاته.. كنت قد طرحت سابقًا موضوع يتكلم عن ارسال رسائل الى الواتس اب لعدد X من المستخدمين من خلال الاكسس وهنا X معناها عدد معين كأن يكون 10 مستخدمين او اكثر او اقل.. الموضوع القديم كان فيه مشكلة وهو ان رسائل الواتس اب الطويلة لا يمكن ارسال او تُرسل بشكل مقطوع! الحمدلله في هذا الاصدار تم التغلب نهائيًا على هذه المشكلة واصبح البرنامج يرسل عدد كلمات بالعدد الذي يسمح به الواتس اب الجديد في هذا الاصدار: امكانية ارسال المرفقات ( الصور فقط ) 1- يمكنك ارسال رسائل فقط 2- يمكنك ارسال صور فقط 3- يمكنك ارسال رسالة مع صورة صورة مشروع الاكسس: قم بتحديد الاشخاص الذين تريد ارسال الرسالة لهم مع وضع نص الرسالة مع امكانية تحديد الكل يمكنك شروط البرنامج بحسب ماتراه مناسباً. النتيجة: ملاحظة يجب ان يكون برنامج الواتس اب موجود في جهاز الكومبيوتر واهم ملاحظة هي يجب كتاب رقم الواتس اب الذي تريد ان ترسل له الرسالة كما يظهر في البرنامج، مثال: لتحميل الواتس اب من الرابط الاتي: https://www.whatsapp.com/download بالمناسبة: الحمدلله انتهيت من برنامج تحويل الصور الى نصوص مهما كانت اللغة ( OCR ) وخصوصا اللغة العربية وحتى الصور التي تكون مكتوبة بخط اليد يتم تحويلها الى نصوص يسهل التعديل عليها في برنامج الوورد البرنامج يعمل بطريقتين: 1- يمكنك تحويل الصور بشكل مباشر 2- يمكنك استخدام الاكسس في ارسال CommandLine يتضمن مسار الصورة ومسار ملف التكست للنص الذي سوف يحفظ وسيقوم البرنامج بعمله لا تنسوني ووالدي من صالح دعائكم. تم بحمد الله. SendWhatsAppMessages.rar
    9 points
  40. بسم الله الرحمن الرحمن الرحيم الدرس الثاني لليوزفورم التفاعلي تعال نفكر مع بعض خارج المألوف والمعقول بمعني ايه اي حد بفكر يعمل فورم يسهل استخدام البيانات بقعد يفكر في شكل الفورم وتصميمه وتركيب الاكواد وما الي ذلك في موضوعات تناولت الفورم المرن او حسب مايكون اسمه فورم بيركب علي ورقة العمل وتضبط شغلك عليه لو فكرنا بطريقة مختلغة برمجية خارج حدود التصميم والاكواد والوقت والمجهود طيب الفكرة هنا ايه ...........!!! فورم يصنع لك الفورم يلي انت عاوزه بالالوان والاعمدة والشكل نفس فكرة مواقع التصميم والبلوجر يلي بتعطيك template قالب جاهز وتعدل عليه ندخل في الموضوع النهاردة موضوعنا فورم تفاعلي يصنع لك فورم خدمي نضيف ورقة عمل جديد من خلال التبويب Insert Sheet نضيف عدد الاعمدة يلي انت عاوزها في قاعدة بياناتك من خلال Enter No of columan مثال اضافة ورقة عمل جديدة باسم Officana عدد الاعمدة 5 مثلا (Sno-Name-username-password-Contact) اقوم بادخال اسماء الاعمدة ثم Add من خلال الفورم هاتقدر تعدل المسيات تضيف تحذف كما تشاء بعد ما تنتهي من الاعداد للتصميم لقاعدة بيانات كل يلي عليك تختار الشيت تدخل طريق العرض من خلال عدد الاعمد مثلا 3 وتضغط openForm وشوف النتيجة وهنا هتلاقي وظايف البحث والتعديل والحذف كما اخترت طريقة العرض 3 طيب لو غيرنا طريق العرض 2 لاحظ تغير الفورم معاك لتغير اللون اضغط علي Color هاسيبك تجرب بنفسك وتشوف النتيجة اتمني من الله اكون قدرت اوصلك المعلومة وافيدك الملف بالمرفقات Advance Data Entry Software Officana.xlsm الدرس القادم الفورم التفاعلي المتقدم عن نقاط البيع ان شاء الله برنامج POS لادارة نقاط البيع مع فاتورة ضريبية
    9 points
  41. أحسنت استاذ وجيه بارك الله فيك وزادك الله من فضله .. عمل ممتاز
    9 points
  42. :: السلام عليكم ورحمة الله وبركاته :: 🙂 يطيب لي أن أهديكم هذه الهدية البسيطة 🎁 :: مرسال الواتسأب :: وهو برنامج بسيط جدا لإرسال الرسائل عن طريق الواتسأب .. مع إمكانية إرسال المرفقات كذلك ( صور أو مستندات ) 🙂 وله واجهتين رئيسيتين : 1 - الرسائل الفردية 2 - الرسائل الموجهة لعدة أشخاص :: وهذه صور لواجهات البرنامج :: طبعا من الضروري تنصيب برنامج الواتسأب للكمبيوتر وتشغيله قبل تشغيل البرنامج 🙂 وبملاحظاتكم ودعواتكم دوما نرتقي 🙂 :: وأخيرا :: التحميل :: ☺️👌🏼 مرسال الواتسأب.accdb
    9 points
  43. بسم الله الرحمن الرحيم :: (( مكتبة الأكواد الخاصة )) :: وهي عبارة عن حافظة شخصية للأكواد والملفات الخاصة بمبرمج الأكسس أو أي مبرمج آخر .. البرنامج به كم لا بأس به من الأكواد التي كنت أستخدمها في تصميم البرامج، بعضها من إبداعات الإخوة في الموقع وبعضها من مصادر أخرى.. من مميزات البرنامج خاصية البحث السريع للوصول للأكواد بسهولة .. وفيه تقسيمات للأكواد المجربة وغير المجربة .. وكذلك يمكن الإشارة للمرجع الذي تم أخذ الأكواد منه .. وأيضا يمكن حفظ الملفات المرتبطة والأمثلة في مجلدات قرينة بالبرنامج 🙂 البرنامج مفتوح المصدر ويمكن لك أن تغير فيه ما تشاء ليلبي احتياجاتك الشخصية .. :: ما الجديد في النسخة الثانية :: تم زيادة عدد الأكواد إلى أكثر من 170 كود VBA وغيرها .. ( كنز حقيقي 🙂 ) الكثير من الأكواد التي تم اختبارها وإنتاجها بجهود الإخوة في المنتدى تم إدراج العديد من المرفقات المصاحبة لبعض الأكواد كأمثلة حية . تحسينات بسيطة على تصميم المكتبة. إبحث عن ما تريده لعلك تجده في مكتبتنا العامرة :: للتحميل :: مباشرة من مكتبة الموقع 🙂 : مهم جدا :: تأكد من فك ضغط الملف بعد التحميل لتستطيع فتح المرفقات :: 🌷 :: تحياتي :: 🌷 🙂 :: ولا تنسوني من صالح دعواتكم :: 🙂
    9 points
  44. سبحان الله اولا : فى هذا الصرح الشامخ تقدم المعلومات مجانا ثانيا : فى هذا المنتدى اهل الجود والكرم سواء كانوا اساتذة علماء واجلاء او خبراء او هواة او طلاب علم ثالثا : انت لا تعلم شئ عن ظروف الناس التى قد تسطيع تقديم المساعدة لك او لغيرك منهم الطاعن فى السن ومنهم المريض الذى قد يمنعه المرض احيانا من التواصل وتقديم يد العون ومنهم المشغول بعمله والذى هو اساس لقمة العيش بالنسبة له ولاولاده واهل بيته و و و و و................... الخ رابعا : معظم المواضيع التي لا يكون فيها رد معناه إما الموضوع صعب وإما ان الشرح مافيه تفصيل وامثلة فأنا مثلا اذا وجدت ان السؤال غير واضح اذهب الى موضوع آخر لكي استفيد من وقتي للأسف ارى بعض الاسئلة وكأن السائل يتمنن علينا بالمعلومة او يتهمنا بالتجاهل له بينما يجب ان يساعدنا بالتفاصيل حتى نساعده بالجواب وخذها قاعده اذا لم يتم الرد على سؤالك خلال يومين ووجدت اكثر من 10 قراءات فيجب عليك اعادة عرض السؤال بطريقة مختلفه وبشرح افضل وبمثال وهذا ما اقعله اذا وضعت سؤال فى المنتدى كما اننى على سبيل المثال والحمد لله تعالى اولا واخيرا على كل حال فى تلك الفترة اعانى من مشكلة عضوية لا تسمح لى بالتواجد والمشاركة كما كنت من قبل واذا دخلت الى المنتدى قد ادخل لاننى اريد شيئا معينا يخدم عملى والذى هو مصدر دخلى الاول والاخير و الوحيد واكون مضطرا للدخول وللعلم علمى لا علافة له بالبرمجة واحاول جاهدا فى تلك الدقائق القليلة تقديم المساعدة بقدر الامكان بالقاء نظرة سريعة على التساؤلات والتى احسها بسيطة ولن تستغرق منى وقت وجهد تظرا لحالتى الصحية اولا ولضيق وقتى ثانيا لا ابخل فى المشاركة وتقديم العون وعلى العموم جزاكم الله خيرا على وصفكم ونعتكم لرواد المنتدى والعرب جميعا بتلك الصفات الغير حميده ولكن بالاصالة عن نفسي وبالنيابة عن اخوانى رواد المنتدى العرب نسامح لوجه الله ونتصدق بأعراضنا لله تعالى لان اخلاقنا لا تسمح بغير ذلك وان وجدنا لك مسألة نسطيع المساعدة وتقديم يد العون فيها لن نبخل ولن نتردد ولن نقابل اسائتكم بمثلها لاننا لا نريد منكم او من غيركم جزاء او شكرا الكل هنا وانا اقلهم نبتغى وجه الله تعالى فقط ان اردتم التواجد بيننا اهلا بكم وان لم يكن لكم ما شئتم ملاحظة راجع ردود الاساتذة والخبراء تجد ان الاجابات لا تقتصر على قدر السؤال ولكن تقدم باستفاضة وبكرم وسخاء تم اغلاق الموضوع منعا لكثرة الكلام والقيل والقال .... ولكن رجاء لا تسئ الى اناس لا يستحقون ذلك
    9 points
  45. السلام عليكم ورحمة الله وبركاته هذا ناتج تمرين اليوم على البرمجة VBA 🙂 :: آلة حاسبة :: أهديكموها مفتوحة المصدر 😊🎁 ملاحظة : تم إضافة خاصية الحساب عن طريق مفاتيح الكيبورد 😊 مع حل مشكلة الأرقام العشرية 😁 آراؤكم ودعواتكم 😉 Moosak Calculator V1.1.accdb
    9 points
  46. السلام عليكم ورحمة الله اعزائى اعضاء منتدى اوفيسنا زملائى العاملين بكنترولات التعليم التجارى لسنوات النقل بعد التحية و كل عام و انتم بخير بمناسبة قرب شهر رمضان الكريم .... اعاده الله علينا و على الامة العربية و الاسلامية و الانسانية جمعاء بالخير و البركات و ايضا قرب امتحانات آخر العام من حوالى 3 اعوام كنت قد اضفت الى منتدانا الموقر شيتات التعليم التجارى و الحقيقة لم اجد لها القبول الذى كنت اتوقعة و لكن بعد مرور تلك المدة اود ان اتوجه بالشكر و التحية للاخ الكريم عضو المنتدى / صوت الحق و الحقيقة لولاه ما عاد هذا الموضوع للنور مرة اخرى من بداية شهر فبراير الماضى حتى كتابة هذا الموضوع و انا فى عمل مستمر للتعديل و التطوير حتى يصبح العمل على اكمل و جه و اعلى الامكانيات يوجد فى كل شيت ورقة تعليمات فيها شرح مفصل لكل خاصية من خصائص البرنامج و الآن اليكم الشيتات : كنترول اولى.xlsm كنترول ثانية.xlsm
    9 points
  47. السلام عليكم ,, الاخوة الاعزاء كل عام وانتم بخير . كما نعلم ان الايقونات جزء لا يتجزء من الواجهات الحديثة الجذابة التى تلفت الانظار ومن هذا المنطلق واستكمالاً للموضوع السابق الذى تجده هنا : موضوعنا اليوم عن كيف تصنع ايقوناتك خصيصاً لتتناسب مع تصميم برنامجك بطريقة بسيطة , انظر النتيجة : هناك اختلاف بسيط فى الالوان لأنى عملتهم على عجالة 😅 . فى هذا الموضوع سنستخدم أداة بها آلاف الايقونات القابلة للتخصيص من حيث اللون والحجم اسم الاداة Pichon يمكنك تحميلها من هذا الرابط المباشر : من هنا بعد التحميل والتثبيت ستجد هذه الايقونة افتح البرنامج وابحث عن الايقونة التى تريدها بوصفها مثلاً Facebook , Twitter وهكذا , ستجد ايقونات غير قابلة للتخصيص ولكن يمكن التحكم فى حجمها وستجد ايقونات يمكن تغيير ألوانها ستجدها تحت تصنيف Material وبها تصنيفات فرعية مثلا Outlined للايقونات المفرغة و Filled للايقونات الممتلئة , ابحث ن الايقونة وقم بتلوينها مثل المثال : اضغط كليك يمين ثم Save As واحفظ الايقونة شفافة يمكن وضعها على اى تصميم طيب انا محتاج لون دقيق جدا حتى يكون هناك تناسق تام فى الألوان والتصميم فى هذه الحالة يمكنك سحب اللون بالاداة الموجودة فى الموضوع السابق اتبع المثال لسحب لون الاكسس المحبوب على سبيل المثال : لا حدود لما يمكنك ابداعه , بتطبيق ما تعلمته من الدرسين يمكنك عمل Themes يقوم المستخدم بنحديد المفضل لديه ويتم تغيير الوان الازرار والايقونات وشريط العنوان ليصبح برنامجك شبيهاً ببرامج .Net 😅 المطلوب دعوة بظهر الغيب لصلاح الحال وتيسير الامور , دمتم بخير مرفق المثال الاول لتغيير الوان الحروف والايقونات المستخدمة Icon Color Amr.rar
    9 points
  48. تفضل هناك العديد من الأكواد لتنفيذ طلبك منها : Sub PDF_Show() ActiveWorkbook.FollowHyperlink "C:\Users\Ali\Downloads\ÚÞÏ ÇáÊÃÓíÓ-ãÍæá.pdf" 'يجب عليك تغيير وتعديل عنوان ومكان ملف البى دى اف بما يتوافق عندك بين علامتين التنصيص End Sub وهذا كود ثانى Sub OpenPDF() Dim pdf As String On Error Resume Next pdf = "C:\Users\Ali\Downloads\عقد التأسيس-محول.pdf" 'يجب عليك تغيير وتعديل عنوان ومكان ملف البى دى اف بما يتوافق عندك بين علامتين التنصيص ActiveWorkbook.FollowHyperlink pdf End Sub واليك الملف اوراق الشركة.xlsm
    9 points
  49. السلام عليكم .. الاخوة الافاضل الموضوع اليوم بسيط وسريع ويتحدث عن طريقة عمل قوائم مختصرة منبثقة من الازرار مثل الصورة التالية : الفكرة كلها ان عندى نموذج به الكثير من الازرار فبحثت عن طرق لاختصار الاوامر كلها فى زر او اثنين وبالتالى وصلت الى الفكرة التالية. اول خطوة عمل موديول جديد به الكود التالى : Sub MyMenu2() Dim Mnu As CommandBar, Itm As CommandBarControl Set Mnu = CommandBars.Add("", MsoBarPopUp, , True) Set Itm = Mnu.Controls.Add: Itm.Caption = "Export To PDF": Itm.OnAction = "amr3" Set Itm = Mnu.Controls.Add: Itm.Caption = "Export To Excel": Itm.OnAction = "amr4" Mnu.ShowPopup End Sub القائمة السابقة فيها امرين 2 فقط ويمكن زيادتها كما تريد بتكرار السطور وتغيير الاسماء , بالنسبة لAmr1 فى نهاية الجملة هو الامر المطلوب تنفيذه وسيتضح الموضوع من المثال المرفق . الخطوة الثانية : فى النموذج المطلوب تنفيذ الفكرة عليه , خلف زر الامر يتم وضع كود استدعاء للكود السابق كالتالى : Private Sub Command0_Click() MyMenu2 End Sub والنتيجة عند الضغط على الزر تنبثق القائمة كما فى الصورة السابقة . ملاحظات : قمت باضافة خيار آخر لاظهار القائمة وهو عن طريق الضغط على زر الفأرة الايسر مع زر الشفت فى نفس الوقت وستظهر القائمة ايضاً . يمكن تطبيق الطريقة فى التقارير والنماذج مع الاحتفاظ بالقائمة المختصرة الافتراضية الخاصة بزر الفأرة الأيمن وبالتالى سيصبح عند قائمتين مختصرتين اذا اردت الابقاء على الافتراضية . يجب تفعيل المكتبات الموجودة بالصورة حتى لا تواجه مشاكل . اترككم مع المثال لمزيد من التوضيح .. دمتم بخير Amr Magic Button.accdb
    9 points
  50. وعليكم السلام-فقط يمكنك استخدام هذه المعادلة بالتنسيق الشرطى =C$2=$G3 تنسيق 1شرطي.xlsx
    9 points
×
×
  • اضف...

Important Information