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

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

  1. أ / محمد صالح

    أ / محمد صالح

    أوفيسنا


    • نقاط

      17

    • Posts

      4,431


  2. Moosak

    Moosak

    أوفيسنا


    • نقاط

      11

    • Posts

      1,997


  3. jjafferr

    jjafferr

    أوفيسنا


    • نقاط

      11

    • Posts

      9,814


  4. متقاعد

    متقاعد

    الخبراء


    • نقاط

      6

    • Posts

      583


Popular Content

Showing content with the highest reputation on 07 يون, 2022 in all areas

  1. شكلي ما أعرف أروج صح .. عليك بالكاتب الذكي لدوال المجال وهذا الحل : DCount("*";"[tblibrarey]";"[books] ='"& [Forms]![finfo]![bx] &"' And [readers] ='"& [Forms]![finfo]![rx] &"' ") test5.accdb
    3 points
  2. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته اليوم جئتكم بفكرة جديدة وإبداعية لتحديث نسخة الواجهات 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
    2 points
  3. أنا مستمع جيد .. نورني بسيطة .. غيرها إلى Dlookup 🙂 DLookUp("[totalbook]";"[tblibrarey]";"[books] ='"& [Forms]![finfo]![bx] &"' And [readers] ='"& [Forms]![finfo]![rx] &"' ") العفو حبيبنا 😊🌹
    2 points
  4. وعليكم السلام 🙂 او افتح النموذج بهذا الامر: docmd.OpenForm "اسم النموذج",,,,acFormAdd جعفر
    2 points
  5. في خصائص النموذج ضع قيمة ال Data Entry > Yes أو ( إدخال بيانات ) بالعربي
    2 points
  6. شكرا على المرفق 🙂 انا عملت التغيير اللي اخبرتك ، ولكن على حقل آخر (للمقارنة) ، ويجب ان يكون نص : . ونحصل على نفس النتائج: . ولكن ، وبما انه Combobox ، فلا يمكننا معرفة العمود الاول والثاني من مجرد النظر الى النتيجة ، فالاعدادات هي التي تخلينا نرى النتيجة ، لهذا السبب ، خلينا نطلب قيمة الاعمدة بالاسم : . والنتيجة ، معناها ان التغيير اللي عملته انا في الاعدادات ، في الواقع ما عمل تغيير في قيم الـ Combobox بالنسبة للأكسس : . ولكن لما تستورد البيانات من اكسل ، تكون النتيجة: . جعفر 1517.Combo_Column2.zip
    2 points
  7. حسب فهمي للمطلوب : وهو تحويل الأرقام الموجودة في ورقة1 من D4:L65 إلى ما يقابلها من أسماء في نفس المدى ووضغها في شيت ورقة2 . مع العلم أن الأسماء سواء في ورقة1 أو ورقة2 اعتمادا على رقم المسلسل للوصول للمطلوب بإذن الله يمكنك: * حذف المحتويات للخلايا D4:L65 * حذف تنسيقات لون الخلفية ولن النص في نفس النطاق * استعمال المعادلة التالية في الخلية D4 =IFERROR(VLOOKUP(ورقة1!D4:L65,$B$4:$C$65,2,0),"ح") * إضافة تنسيق شرطي للخلية D4 باستعمال المعادلة التالية =COUNTIF($D4:$L4,D4)>1 ويطبق على المدى =$D$4:$L$65 ولا أدري ما سبب الصف الفارغ بين مسلسل 31 و 32 بالتوفيق
    2 points
  8. السلام عليكم ورحمة الله وبركاته انا احد الاشخاص الذين لا يحبذ ان يستعمل الكود في تخفيف أمان الاكسس ، فقد وضعته شركة مايكروسوفت في حزمة الاوفيس حتى تحمينا من ايدي المخربين ، وفي هذا الرابط شرحت كيفية عمل مجلد موثوق به للأكسس 2007 فما فوق: http://www.officena.net/ib/topic/66450-دمج-ملف-وتشغيله-قبل-أو-مع-بدء-اكسس/#comment-432363 المشكلة في كود تخفيف الامان ، انه لا يخفض مستوى أمان الاكسس لبرنامجك فقط ، وانما يخفض مستوى أمان جميع برامج الاكسس. ولكننا كمبرمجين لدينا مشكلتنا ، في انه اذا ارسلت برنامجك الى شخص ما ، فلا بد من التواصل معه و اعطاؤه الخطوات كما في الرابط ، وإلا فالبرنامج لن يعمل ، لان البرنامج يشتمل على الماكرو والوحدات النمطية. هنا اقدم لكم طريقة لجعل برنامجي فقط يعمل بمستوى أمان أقل ، فلا تظهر لي رسالة الأمان من الاكسس. العمل كله يدور حول كود ، ويجب حفظ الكود هذا في ملف بصيغة vbs ، والذي يجب ان نفتح برنامجنا عن طريقه. الكود يعمل على برامج الاكسس بصيغة mdb و accdb ، والمفروض ان يعمل على جميع اصدارات الاكسس 2003 فما فوق ، وعلى الاكسس 32بت و64بت (انا هنا اطلب من الشباب تجربته بإصدارات الاكسس التي يعملون عليها ، وإخبارنا بالنتيجة لوسمحتوا). اليكم طريقة العمل (رجاء انزال المرفق وفكه في المسار C:\jj ، وذلك حتى يمكنكم متابعة خطواتي): رجاء وضع البرنامج المرفق Seq.mdb حسب المسار التالي: C:\jj\Seq.mdb الآن اذهب الى المجلد C:\jj وافتح البرنامج Seq.mdb بالنقر المزدوج ، عند فتحه نرى رسالة أمان الاكسس ، وهذا متوقع ، وذلك بسبب انه في مجلد غير موثوق به (رجاء لا تضف هذا المجلد كمجلد أمان ، وانما اخرج من البرنامج). . الملف الآخر المرفق Seq.vbs ، يحتوي على هذا الكود: rem http://www.accessmvp.com/jconrad/accessjunkie/macrosecurity.html rem expression.OpenCurrentDatabase(filepath required, Exclusive optional, bstrPassword optional) dim o set o=createobject ("Access.Application") o.automationsecurity=1 ' set macro security LOW. o.opencurrentdatabase "C:\jj\Seq.mdb" o.usercontrol=true set o=nothing . تستطيع ان تجعله في اي مجلد (ممكن تجرب نسخه منه في اي مجلد شئت) ، وانقر مرتين على هذا الملف بُغية تشغيله ، سترى انه فتح البرنامج Seq.mdb ، وبدون رسالة أمان الاكسس ، وهو المطلوب ------------------------------------------------------------------------------------------------------------------------------------------- هذه الخطوة إضافية ، وهي لتحويل الملف السابق من صيغة vbs الى exe ، واختيار ايقونه للملف الجديد الآن ننتقل للخطوة التالية ، وهي ، اننا لا نريد ان ايقونة vbs ، وانما نريد ايقونه خاصة لبرنامجنا. هناك طريقتين: 1. ايقونة مختصر البرنامج Shortcut: وهي ان نعمل مختصر لملف Seq.vbs ، ولكن وللأسف مختصر ملف vbs يعطينا نفس ايقونة الملف نفسه ، وما عندنا طريقة لتغييرها!! لذلك ، سنعمل مختصر لملف الاكسس ، ونغير البيانات كالصورة التاليه ، بحيث يصبح مختصر ملف vbs يحتوي على ايقونة ملف الاكسس (طبعا يمكنك ان تغير الايقونة الى اي شئ شئت): . . . . وبهذه الطريقة غيّرنا ايقونة برنامج vbs الى ايقونه اخرى مناسبة 2. تحويل ملف vbs الى ملف تنفيذي exe ، وتختار له الايقونة التي تعجبك: رجاء انزال البرنامج المجاني Vbs to Exe من الرابط التالي: http://www.f2ko.de/en/v2e.php احد اسباب اختياري لهذا البرنامج ، اننا نستطيع التحكم به عن طريق Commandline ايضا ثم نتبع الخطوات التالية: ونستطيع ان نعمل لبرنامج vbs هذا كلمة سر كذلك ، . في الخطوة 6 تستطيع ان تكتب معلومات شركتك ، ونختار الايقونه التي نريدها للبرنامج (الخطوة 5) . . وتستطيع ان تجعله على سطح مكتب كمبيوترك الميزة في هذه الطريقة ، ان المستخدم لن يعرف مكان برنامج قاعدة البيانات Seq.mdb ، ولن يعرف الكود الذي كان في Seq.vbs ارجو ممن يضع ردا على الموضوع ، ان يذكر: 1. اذا اشتغل البرنامج على كمبيوتره ، 2. نسخة الاكسس التي يستخدمها. ملاحظة: الظاهر ان بعض متصفحات الانترنت حجبت انزال المرفق Seq.zip ، وذلك بسبب احتوائه على ملف vbs ، والذي يستخدمه الكثيرون لتخريب الكمبيوتر ، لذلك ، ارفق لكم Seq_2.zip والذي يحتوي على نفس ملفات Seq.zip ، ولكني غيرت صيغة الملف Seq.vbs الى Seq.txt . بعد انزال المرفق وفك ملفاته في الكمبيوتر ، رجاء تغيير مسمى الملف Seq.txt الى Seq.vbs جعفر Seq.zip Seq_2.zip
    1 point
  9. بسم الله والصلاة والسلام على رسول الله وعلى آله وصحبه ومن والاه ...إخوتي الكرام السلام عليكم ورحمة الله وبركاته أحببت أن أعرض عليكم بعض إمكانيات الإكسيل الرائعة في تنسيق الأشكال في حال عدم توفّر الفوتوشوب أو البرامج الرسومية الأخرى ليظهر الملف بشكل أنيق ... حبث أنه يتمتع بجماليات في الخط والشكل وتناسق الألوان لكنه بعود على الملف بشيءٍ من البطء وزيادة حجم الملف .. الارتباطات التشعبية تظهر على شكل شفاف كقطرات الندى في صباح ربيعي مزهر..عند وضع المؤشر عليها تدلك على الورقة الهدف. راجياً من الله تعالى أن ينال إعجاب حضراتكم. اسم المستخدم :admin كلمة السر 123 ...بعض أوراق العمل محمية دون كلمة مرور ... والسلام عليكم ورحمة الله وبركاته. مكابس بلوك.rar
    1 point
  10. لا خبير ولاهم يحزنون كما يقولون بالعراقي .... اتمنى في تقاعدي ان اكون راعي اغنام .. واكون مبرمج سابق مثلك لكن كل همي في هذه الدنيا الزائلة ... ان اقوم بعمل يحصل فيه والدي رحمه الله على اجر وثواب كما اتمنى على اولادي من بعدي ان يقوموا بعمل .. احصل فيه على اجر وثواب
    1 point
  11. استاذي العزيز يجب شكركم لاني استفيد من شروحكم و تعليمكم لي , فأنا استفدت كثيرا كثيرا من هذا المنتدي و لولاه ماكنت بهذه المعلومات و كثيرا ما افادني المهندس قاسم و الاستاذ الكبير جعفر و الاستاذ الكبير اباجودي و الخبراء الاجلاء في هذا المنتدي كثر حتي لا انسي احد و كثيرا ما استفدت منهم و مازلت استفيد حتي الان استفيد من خبراتهم و علي ذكر الاستفاده فأنا استفدت من فكرة حضرتك و سوف انفذها ان شاء الله فهي سوف تسهل علي الكثير من الوقت و شكرا جزيلا لك استاذي مبرمج سابق و اسف علي التأخير في الرد لاني لم افتح المنتدي من يوم السبت
    1 point
  12. ماشاء الله جعفر ماقصر مع ذلك للوصول لمعالج التقسيم في التبويب قاعدة بيانات ثم ايقونة قاعدة بيانات اكسس او ضع الامر التالي في زر امر DoCmd.RunCommand 520 سوف يفتح معالج التقسيم تحياتي
    1 point
  13. نعم ستعمل ، وبدون تعديل ، اما كيف تقسم قاعدة البيانات ، فالمنتدى مليئ بمثل هذا الموضوع ، واليك بعض الامثلة: https://www.officena.net/ib/topic/56791-استخدم-ملف-اكسس-من-اكثر-مستخدم-بنفس-الوقت/ https://www.officena.net/ib/topic/82076-طريقة-وضع-كلمة-المرور-بعد-تقسيم-قاعدة-البيانات/ https://www.officena.net/ib/topic/74664-تقسيم-قاعدة-البيانات-وتحويلها-الى-برنامج-تنفيذي/ https://www.officena.net/ib/topic/104953-سؤوال-مهم-في-خاصية-تقسيم-قاعدة-البيانات
    1 point
  14. فعلا 100% 😉👌🏼 والحد الثاني لسلاحنا أنه صديق المحترفين أمثالكم 😅
    1 point
  15. المرفق رائع جدا ويستحق الاشادة مع ذلك كثير من المبتدئين بيعتمدون عليه ولن يتعلموا طريقة استخدام الدوال وكتابة الشروط بمختلف انواعها وجهة نظر 😎
    1 point
  16. إذا كان أحدنا دقيقا في عرض مطلوبه فإنه يساعد غيره في أن يصل للمطلوب ولا يضيع الوقت والجهد هباء ربما ينجزها لحضرتك أحد الإخوة فقد أصبح المطلوب في غاية السهولة والوضوح
    1 point
  17. Allow Deletions=NO Allow Edits=NO
    1 point
  18. وعليكم السلام شيء بسيط على وجه السرعة PAYMENTS.accdb
    1 point
  19. شكرا لك أستاذي العزيز على التشجيع والتحفيز ، جزاك الله خيرا ..🌹 فعلا نبهني أحد أصدقائي لهذه النقطة .. والحل هو أن يتم تخزين جميع العمليات الحسابية والتعامل معها مرة واحدة بدل إجراء العمليات كل على حدة .. عسى أن يتسنى الوقت لعمل إصدار جديد للحاسبة 🙂 وأشكرك جدا على التنبيه 😊🌹
    1 point
  20. فورم المخزن كود اضافة عنوان بصفحة الاكسل فى خلية معينة فيديو4
    1 point
  21. او استخدم نموذج غير منضم لادخال البيانات اذا لم تكن لديك خبرة ابحث في الموقع تجد الكثير من الامثلة
    1 point
  22. و فيك بارك اخي العزيز ابو الحسن ... و لك بمثل ما دعوت به و زياده 🌺
    1 point
  23. يا رجال 🙂 الميزة في المنتدى انك تشوف اسئله ما تجي على البال ، والميدان يا حميدان في حل هذه الاسئلة 🙂
    1 point
  24. بالضبط لهذا السبب يجب ان لا نستعمله في الجدول 🙂
    1 point
  25. الحقيقة الحقل NameID هو حقل رقمي وايضا هنا مستخدم للربط بين جدولين بعلاقة رأس باطراف وعندما نعمل مربع تحرير نقدر نتحكم فيما يظهر لنا من خلال عرض الاعمدة 0سم;2.54سم او من خلال حقل اخر = NameID.Column(1) كما اشرتم ولكن حقل NameID في نظر الاكسس يبقى رقم وهذة واحدة من مشاكل استخدام مربع تحرير في الجدول و من وجهة نظر هذه المربعات مكانها النموذج الحل باستخدام حقل اضافي او الطريقة الاسهل بواسطة استعلام او نلجا الى الي الطريقة الصحيحة تبقى الحقول كما هي رقمية فقط ونستخدم مربع التحرير في النموذج ونتحكم في ما يظهر في التقارير بواسطة الاستعلام تحياتي
    1 point
  26. مثل تفضلت ، بس بزاوية مختلفة 🙂 . جعفر
    1 point
  27. لعل هذا يكون هو المطلوب تم وضع كود في حدث بداية النموذج لوضع قائمة بأسماء الشيتات في الكومبوبوكس وتعديل زر الترحيل بالتوفيق الترقيم التلقائي والترحيل للشيت المحدد.xls
    1 point
  28. حل اخر ممكن نعمل استعلام من الجدولين يكون مصدر ملف الاكسل واعتذر اذا كان فهمي غير صحيح
    1 point
  29. لعل هذا هو المطلوب تم استعمال الخلية T1 لاختيار طريقة الطباعة فردي أو جماعي تغيير كود الاجراء text إلى Sub text() printtype = N.Range("t1") If printtype = "فردي" Then x = InputBox("من فضلك ادخل الرقم القومى مع تحياتى اشرف صبور ") N.Range("t2") = x On Error GoTo mm i = Application.WorksheetFunction.Match(N.Range("t2"), DB.Range("c:c"), 0) Call filldata(i) N.PrintPreview Call cler Exit Sub mm: MsgBox "الرقم القومى غير موجود مع تحياتى اشرف صبور" Else lr = DB.Cells(Rows.Count, 3).End(3).Row For r = 13 To lr filldata (r) ActiveSheet.PrintOut Next r Call cler End If End Sub وفي حالة اختيار جماعية يتم طباعة الأرقام من الصف 13 إلى آخر صف مكتوب فيه lr = DB.Cells(Rows.Count, 3).End(3).Row For r = 13 To lr وحتى لا نكرر كود تعبئة الخلايا تم فصل كود التعبئة في إجراء منفصل مع تمرير رقم الصف المراد طباعته إليه Sub filldata(i) N.Range("c7") = DB.Cells(i, "g") N.Range("c8") = DB.Cells(i, "ci") N.Range("g7") = DB.Cells(i, "b") N.Range("g8") = DB.Cells(i, "c") N.Range("c9") = DB.Cells(i, "f") N.Range("c13") = DB.Cells(i, "i") N.Range("e13") = DB.Cells(i, "j") N.Range("b16") = DB.Cells(i, "l") N.Range("c16") = DB.Cells(i, "m") N.Range("d16") = DB.Cells(i, "n") N.Range("b22") = DB.Cells(i, "af") N.Range("b23") = DB.Cells(i, "ao") N.Range("b24") = DB.Cells(i, "ax") N.Range("b25") = DB.Cells(i, "bg") N.Range("d20") = DB.Cells(i, "q") N.Range("d21") = DB.Cells(i, "y") N.Range("d22") = DB.Cells(i, "ah") N.Range("d23") = DB.Cells(i, "aq") N.Range("d24") = DB.Cells(i, "az") N.Range("d25") = DB.Cells(i, "bi") N.Range("d26") = DB.Cells(i, "bq") N.Range("d27") = DB.Cells(i, "by") N.Range("d29") = DB.Cells(i, "cf") N.Range("g20") = DB.Cells(i, "w") N.Range("g21") = DB.Cells(i, "ae") N.Range("g22") = DB.Cells(i, "an") N.Range("g23") = DB.Cells(i, "aw") N.Range("g24") = DB.Cells(i, "bf") N.Range("g25") = DB.Cells(i, "bo") N.Range("g26") = DB.Cells(i, "bw") N.Range("g27") = DB.Cells(i, "ce") N.Range("g28") = DB.Cells(i, "k") N.Range("f29") = DB.Cells(i, "cg") N.Range("e20") = DB.Cells(i, "s") N.Range("e21") = DB.Cells(i, "aa") N.Range("e22") = DB.Cells(i, "aj") N.Range("e23") = DB.Cells(i, "as") N.Range("e24") = DB.Cells(i, "bb") N.Range("e25") = DB.Cells(i, "bk") N.Range("e26") = DB.Cells(i, "bs") N.Range("e27") = DB.Cells(i, "ca") N.Range("f20") = DB.Cells(i, "t") N.Range("f21") = DB.Cells(i, "ab") N.Range("f22") = DB.Cells(i, "ak") N.Range("f23") = DB.Cells(i, "at") N.Range("f24") = DB.Cells(i, "bc") N.Range("f25") = DB.Cells(i, "bl") N.Range("f26") = DB.Cells(i, "bt") N.Range("f27") = DB.Cells(i, "cb") N.Range("c31") = DB.Cells(i, "cl") N.Range("g31") = DB.Cells(i, "cm") End Sub وأنصح دائما بدراسة وفهم الكود ومتغيراته وكائناته جيدا قبل تطبيقه على شيت آخر بالتوفيق طباعة فردي أو جماعي.xlsm
    1 point
  30. استاذى العزيز يوسف أحمد بارك الله فيك اخى حفظك الله وزادك من فضله هذا هو المطلوب رائع رائع رائع جزاك الله عنا كل الخير يارب
    1 point
  31. وابويا انا عليك موسى ، تو ملاحظتي صارت لا محل لها من الاعراب 🤔🙄 🙂 جعفر
    1 point
  32. و عليكم السلام و رحمة الله و بركاته اخي الكريم ابو الحسن مرفق مثال لما طلبت : في حال كان جهازك متصل بالانترنت يعمل زر الاغلاق و في حال عدم الاتصال لا يعمل الزر و تظهر لك رسالة تفيد بذلك ارجو ان يكون هو المطلوب بالتوفيق internet Check.rar
    1 point
  33. السلام عليكم 🙂 قبل كل شيء ، خلوني ابخر المكان عن العين ، علشان ما تصيب الحبايب 😁 . شكرا على الفكرة الجديدة ، بأرسال النسخة الجديدة من FE بإستخدام BE ، بدل عن سحبها بواسطة FE 🙂 في الواقع انا اكملت برمجة التحديث قريبا ، ودارت في بالي العديد ، وقرأت عن العديد من الطرق ، واستقر رأيي على الطريقة التقليدية ، مع العلم ان هذه الفكرة اتت على بالي (BE هو الذي يرسل التحديث) ، ولكن ارتأيت عدم استخدامها ، لأسباب التالية: ضعف الشبكة في موقع العمل ، وفي الواقع هذه تجربة جدا فريدة ، جعلتني اعيد النظر في الكثير من تفاصيل البرمجة ، وقد اُوفق لعمل موضوع خاص به إن شاء الله ، المستخدم (على الاقل 4 حاليا) ، يجب ان يُلبي طلب الزبائن ، بمعدل 3 زبائن في الدقيقة (والامل ان يكون اكثر) ، وبسبب ضعف الشبكة ، التركيز كان على جعل BE في حالة تأهب لخدمة المستخدم ، ولا نشغل BE بأي شيء آخر ، يجب ان يتم التحديث بدون تدخل المستخدم ، فهنا يجب ان نعرف مسار برنامج FE المستخدم ، تلقائيا ، وليس مكان البرنامج الاصل ، فربما ولسبب ما ، قام المستخدم بتغيير مكان المجلد الى مكان آخر ، كانت الفكرة ، ان لا استعمل نموذج في BE ، وانما عن طريق ادخال قيمة في حقل معين في جدول ، وهذا الحقل يقوم بتشغيل وحدة نمطية في BE ويقوم بعمل اللازم ، بهذه الطريقة: هذه المعلومة غير دقيقة ، فأول برنامج اكسس عملته لمؤسسة عام 2002 ، وضعت البرنامج كاملا على السيرفر ، وكان يستخدمة بين 5-8 اشخاص في اليوم ، والحمدلله الله ستر وما صارت مشكلة فيه 🙂 وحيا الله بالحبايب ، اللي ذكروني ، واللي ما ذكروني 🙂 جعفر
    1 point
  34. ما دمت مصرا على تجاهل الخطأ في تنظيم البيانات واختلاف عدد السطور في كل عمود عن غيره في نفس الصف هذا الكود يبحث عن كلمة بكالوريوس ويجلب البيانات الموجودة في نفس السطر من جميع الأعمدة ويضعها في الأعمدة بداية من H:M مع تجاهل أي خطأ يقابله لذلك أنا شخصيا لست متأكدا بنسبة 100% من صحة النتائج لأن البيانات غير صحيحة من البداية Sub MasSplitText() Dim MyArray() As String, newcol As Long, i As Variant, lr As Long On Error Resume Next lr = Cells(Rows.Count, 1).End(3).Row Range("h2:m" & lr).ClearContents For c = 1 To 6 For rw = 2 To lr MyArray = Split(Cells(rw, 2), Chr(10)) newcol = c + 7 For i = 0 To UBound(MyArray) If MyArray(i) = "بكالوريوس" Then Cells(rw, newcol) = Split(Cells(rw, c), Chr(10))(i) Next i Next rw Next c MsgBox "Done by mr-mas.com" End Sub بالتوفيق
    1 point
  35. اخي الفاضل الشكر لله ثم للمهندس قاسم فانا فقط وضعت مداخلة بسيطة وبما انك وجدت الحل المطلوب والحمد لله فسوف اتحدث قليلا عن فائدة حقل في الجدول الذي اشرت اليه في ردي السابق وكيف يؤثر على عمل قاعدة بيانات ويمنعنا من الخطا ويغنى عن وجود جداول متعددة تحتوي على نفس النوع من البيانات ومثالنا برنامج للموارد البشرية في جدول الموظفين وضعنا حقل رقمي واسميناه الحالة اذا كانت القيمة 1 يكون الموظف على راس ويدرج اسمة في بيان الرواتب و كشوف العمل الاضافي و الاجازات وووووو الخ القيمة 2 يكون الموظف تم تعيينة ولكن لم يباشر الوظيفة وبالتالي غير مستحق للراتب وووو الخ القيمة 3 الموظف مكفوف اليد يدرج اسمة ضمن كشف الرواتب ولا يستحق سوى 50% من الراتب ولا يستحق اي من مميزات الموظف القيمة 4 استقالة لا يستحق اي من المميزات ماعدا شاشة التعويضات القيمة 6 متقاعد مبكر فقط يدرج اسمة في شاشة مكافاة نهاية الخدمة بحد اقصى 4 اشهر وشاشة التعويض عن الاجازات الخ وهذه الحالات كثيرة ولكن هذا مجرد مثال مع ملاحظة ان هذة القيمة للحقل لايتم ادخالها بشكل يدوي وانما من شاشة القرارات والرقم يسجل اليا بناء على نوع القرار الان يتبين ان جدول واحد للموظفين يكفي ولا داعي لجداول للمتقاعدين وللمنقطعين والمتوفيين ....... الخ وايضا لا داعي لاستعلام الالحاق الخلاصة تكرار نفس البيانات في اكثر من جدول يعني ان هناك قصور في فهم عمل قاعدة البيانات كما تعودت ان اشير دائما مداخلاتي ليس لانتقاد اي عمل وانما تعبر عن وجهة نظر لمبرمج سابق تحياتي
    1 point
  36. يفضل إرفاق ملفك او مثال منه على العموم هذا مثال سريع إن شاء الله يكون المطلوب الخصم بناء على وقت الحضور.xlsx
    1 point
  37. السلام عليكم ورحمة الله اليك الملف ابتدائي2020.xlsm
    1 point
  38. أخي الحبيب محمد تفضل الملف المرفق ...كل ما عليك أن تضع أوراق العمل المطلوب جلب البيانات منها في مصفوفة بالترتيب الذي ترغب التعامل معه Sub CollectDataFromSheets() Dim MyArray As Variant, Item Dim LR As Long MyArray = Array("خط التعبئة والتغليف", "خط الاستلام والتجهيز", "1", "2", "3") Application.ScreenUpdating = False Sheets("شيت مجمع").Range("A3:H1000").ClearContents For Each Item In MyArray With Sheets(Item) .Activate LR = .Cells(300, 2).End(xlUp).Row .Range("B5:H" & LR).Copy With Sheets("شيت مجمع") .Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1 & ":A" & .Cells(Rows.Count, 2).End(xlUp).Row) = Sheets(Item).Name End With End With Next Item Sheets("شيت مجمع").Activate: Range("A1").Select Application.CutCopyMode = False Application.ScreenUpdating = True End Sub ويتم ذلك من خلال السطر الرابع إليك الملف المرفق للتجربة ولا تنسى أن تحدد المشاركة التي تعجبك كأفضل إجابة ليظهر للأخوة الأعضاء أن الموضوع مجاب ، وعشان آخد نقطة (بعد التعب دا كله) تقبل تحياتي Collect Data From Sheets V2.rar
    1 point
  39. من قال أنها طريقة أخرى أخي الكريم؟؟!! هي نفس الطريقة والدليل لو استعملت الكود المذكور في المشاركة 9 بالطريقة الصحيحة يكون الناتج ملف كالمرفق ضعه في نفس مجلد myweb الخاص بك وشاهد النتيجة mas_web.rar
    1 point
  40. أخي الكريم تلاحظ أن علامات الفاصلة المزدوجة في الكود الأول حول اسم الملف فقط وليست حول كلمة مسار المشروع الحالي وتم وضعها حول جوجل لأنه نص أما في حالة وجود ثوابت أو متغيرات مع النص فلا يتم إحاطة الثوابت أو المتغيرات بعلامتي الفاصلة المزدوجة ويتم فقط إحاطة النص المختلط معها وهذا هو موضع الخطأ والصواب Private Sub Form_Load() Me.WebBrowser0.Navigate CurrentProject.Path & "\html\file1.html" End Sub وزيادة في الأمان يمكنك وضع المسار للملف بين قوسين Me.WebBrowser0.Navigate ( CurrentProject.Path & "\html\file1.html")
    1 point
  41. السلام عليكم أخي كيماس ومرحبا بك في واحة الأكسس حيث البرمجة على أصولها بالفعل دالة dcount تستخدم لعد السجلات أما دالة dlookup للبحث عن سجل بمعايير معينة وما دمت وصلت لأنها تعرض لك id الفصل وليس اسمه يمكنك عمل دالة dlookup أخرى لجلب اسم الفصل من جدول الفصول بدلالة الرقم الذي نتج من المرة الأولى جرب أن تقوم بهذا وأخبرني بالنتيجة
    1 point
  42. ضع هنا الكود الموجود في المشاركة 2 بدلا من جوجل سيتم استعراض الملف المذكور في المسار
    1 point
  43. أخي الكريم لإزالة الفرز أو حتى التصفية يمكنك استعمال هذا الكود DoCmd.ShowAllRecords
    1 point
  44. أخي الكريم يمكنك استعمال هذا الكود لتحديد الرابط الذي يتم فتحه في الكائن webbrowser في النموذج Private Sub Form_Load() Me.WebBrowser0.Navigate "http://www.google.com" End Sub أو عند الضغط على زر كما تحب وساعتها تستبدل جوجل بما تريد من روابط
    1 point
  45. أعتقد أن آلية عمل مراقبة لأعمال المستخدمين الآخرين ليست هكذا وإنما ينبغي علينا عمل جدول جديد وليكن اسمه actions يحتوي على اسم المستخدم و نوع الحركة وتاريخ الحركة وحينما يقوم مستخدم مثلا بإضافة سجل معين يكون ضمن كود الإضافة كود لإضافة سجل في جدول actions يوضح اسم المستخدم وأنه اضاف السجل رقم كذا في جدول كذا ويمكن للمراقب قراءة هذا الجدول ضمن صلاحياته هو وحده والله أعلم
    1 point
  46. والله أنا لم افهم ما تقصد ومادمت وصلت للحل فينبغي عرضه هنا لإخوتك فلربما تعرض أحدنا لمثل هذا الموقف ويفضل أن يكون عرضك للموضوع بالتفصيل ومدعما بالصور إن أمكن كل عام أنتم جميعاً بكل خبر
    1 point
  47. وعليكم السلام ورحمة الله وبركاته يمكنك جعل مسار الملفات مرتبط بمسار البرنامج فلو مثلا وضعت الصفحات في مجلد باسم html والملفات اسمها file1.html يمكن استدعاؤها كالتالي CurrentProject.Path & "\html\file1.html" وهكذا
    1 point
  48. نعم يمكنك ذلك أخي الكريم ضع في الخاصية interval القيمة 1000 وضع هذا الكود في حدث ontimer Private Sub Form_Timer() Label5.Caption = date_diff([NDate], Now()) End Sub تم إضافة تسمية label لظهور التاريخ الذي يتم تحديثه عليها ومرفق ملفك بعد التعديل Mas_TimeAndDate.rar
    1 point
  49. يمكن تجاوزها جرب alt x 5 اذا كان النموذج منبثق لن تعمل
    0 points
×
×
  • اضف...

Important Information