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

Moosak

أوفيسنا
  • Posts

    2,065
  • تاريخ الانضمام

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

  • Days Won

    51

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

  1. أزاحم الكبار فقط 😅 عمل قوائم ديناميكية متحركة :: طريقة مبتكرة بأقل كمية أكواد vba
  2. رائع رائع باشمهندس 😉👌🏼 وتم إضافة التحديث في المشاركة الرئيسية .. 🙂 أما آن الأوان لكشف الأسرار 😁😂
  3. وعليكم السلام ورحمة الله وبركاته 🙂 تفضل الكود : يعمل عندي على ويندوز 10 أوفيس 365 Sub ShowVirtualKeyboard() Dim virtualKeyboardPath As String virtualKeyboardPath = "C:\Windows\System32\osk.exe" ' Path to the virtual keyboard executable Dim shellObject As Object Set shellObject = CreateObject("WScript.Shell") shellObject.Run "C:\Windows\System32\osk.exe" End Sub
  4. السلام عليكم 🙂 تفضل هذا شريط تقدم بدون استخدام التايمر 🙂 شريط تقدم بدون تايمر.accdb
  5. من ضمن الأسباب (حسب ما واجهني ) لظهور تصرفات غريبة للأكسس بدون أي سبب منطقي هو وجود خطأ في احد الأكواد أو نقصان أحد المكتبات .. تأكد من عمل Debug > compile وإصلاح مشاكل الأكواد والمكتبات عندك ثم أعد التشغيل.
  6. أحييك على الجماليات والفنيات والألوان المبهرات باش مهندس @Foksh 👍🙂 ملاحظات بسيطة 😁 : عند الضغط على اسم البرنامج في شريط الوندوز تظهر شاشة البرنامج الرمادية 🙂 عند الضغط على [غفوة] تظهر رسالة الاستعلام ( أقترح لو تخفيها ) ظهورها مزعج 🙂 عند حذف أحد المنبهات تظل الصفحة ويطلع التالي : بعد الضغط على زر الإغلاق يظل الأكسس شغال في الخلفية 🙂 بالنسبة لنغمة المنبه أقترح تعمل قائمة منسدلة للاختيار من الأصوات المرفقة مع النظام ، وزر لاستعراض الملفات لو حب المستخدم يضيف الملف الصوتي من عنده 🙂 + لون النصوص حبذل لو يكون رمادي فاتح لما تكون الخلفية سوداء لتسهل قرائتها 🙂 هذا وتقبل تحياتي 😊🌹
  7. مرجع التعليمات من مايكروسوفت : https://learn.microsoft.com/en-us/office/vba/api/access.docmd.copyobject
  8. - تسجيل من أضاف السجل . - تسجيل من حذف السجل . - إمكانية التطبيق لجميع النماذج .. هذه ممكنة والله أعلم .. ولكن ستكون لها إجراءات إضافية وتعديلات في جدول التغيرات . 🙂
  9. وعليكم السلام ورحمة الله وبركاته .. 🙂 1- هل تريد نسخ الجدول كجدول كامل لأنه غير موجود في القاعدة المستهدفة ؟ 2- أم أنك تريد نقل البيانات فقط ؟ في الأولى يمكنك نقل (نسخ) الجدول من قاعدة بيانات إلى أخرى عن طريق الكود التالي : Sub CopyTable() Dim sourceDB As DAO.Database Dim destinationDB As DAO.Database Dim sourceTable As DAO.TableDef Dim destinationTable As DAO.TableDef ' افتح قاعدة البيانات المصدر Set sourceDB = OpenDatabase("مسار قاعدة البيانات المصدر.accdb") ' افتح قاعدة البيانات الهدف Set destinationDB = OpenDatabase("مسار قاعدة البيانات الهدف.accdb") ' حدد الجدول المصدر الذي ترغب في نسخه Set sourceTable = sourceDB.TableDefs("اسم الجدول المصدر") ' إنشاء جدول في قاعدة البيانات الهدف بنفس التركيبة Set destinationTable = destinationDB.CreateTableDef("اسم الجدول الهدف") For Each fld In sourceTable.Fields destinationTable.Fields.Append destinationTable.CreateField(fld.Name, fld.Type, fld.Size) Next fld ' إضافة الجدول الجديد إلى قاعدة البيانات الهدف destinationDB.TableDefs.Append destinationTable ' نسخ بيانات الجدول destinationDB.Execute "INSERT INTO [اسم الجدول الهدف] SELECT * FROM [اسم الجدول المصدر]" ' أغلق قواعد البيانات sourceDB.Close destinationDB.Close ' تحرير الذاكرة Set sourceTable = Nothing Set destinationTable = Nothing Set sourceDB = Nothing Set destinationDB = Nothing MsgBox "تم النسخ بنجاح!" End Sub وفي حال أنك تريد نقل البيانات فقط .. أعمل ربط بين القاعدتين عن طريق استيراد الجدول كجدول مرتبط .. ثم يمكنك نقل البيانات بين الجدولين عن طريق استعلام الإلحاق.
  10. هذه الطريقة تتيح لك الحرية في اتخاذ إجراءات خاصة لحقول معينة بدل التطبيق على الجميع جملة واحدة .. وهنا استفدنا منها في عملية تخزين قيمة القائمة المنسدلة في المتغير قبل التغيير .
  11. المستحيل ليس له وجود مع المبدعين الله الله عليك مستر فادي 😄 بس زين لو تشرح الفكرة 🙂
  12. توقعتك تسأل .. 😄🖐🏻️ .. هذه واحدة من الطرق الجميلة لتطبيق دالة معينة على مجموعة من العناصر مرة واحدة .. قمت بتحديد جميع العناصر ثم كتبت اسم الدالة في حدث بعد التحديث هكذا ( ()AddToAudit= ) وهذه الطريقة أسهل من كتابة الحدث لكل عنصر على حده .. 🙂 ولها شروط سأذكرها لك .. أما بالنسبة للقائمة المنسدلة وضعت لها دالة منفصلة وذلك لحفظ القيمة الحالية في متغير عام قبل التغيير عند حدث ( عند التركيز ) .. ولو كانت عندك أكثر من قائمة منسدلة حددها جميعا وألصق اسم الدالة لها جميعا مرة واحدة .. من شروط استخدام هذه الطريقة : 1- أن يكون الكود (الإجرائية) من نوع Function وليس Sub . 2- أن لا يكون لنفس العنصر أي أكواد أخرى في نفس الحدث .. وفي حال الحاجة لوضع أكواد أخرى في نفس الحدث يتم العودة للطريقة الإعتيادية لكتابة الكود ويتم مناداة الدالة بالطريقة المعتادة : Call AddToAudit()
  13. عمي أبو خليل @ابوخليل تقبل الله اجتهاداتك وسعيك 🙂 قمت بتغيير الاستراتيجية قليلا وحصلت على نتائج طيبة 😉 جرب المرفق وأخبرني رأيك 🙂 Track Changes - Moosak.accdb
  14. الرابط الموجود في الفورم لم يتم إعداده للمشاركة ( يطلب إذن لتحميله ) ، يجب عليك إتاحة المشاركة للتمكن من التحميل .. هذا هو كود التحميل من الجوجل درايف : كود للتحميل المباشر من الجوجل درايف Google drive شرح الكود: لتحميل الملفات من جوجل درايف بنفس الاسم والامتداد فقط تحتاج رابط الملف كاملا وأن يكون الملف عاما (مشاركا مع الجميع) الكود يعالج مشكلة أسماء الملفات العربية صالح للنواتين 32بت وكذلك 64بت يعمل في كل التطبيقات التي تستعمل vba يوضع هذا الكود في موديول جديد الكود: Sub DownloadFromGD(GDriveURL As String) Dim myURL As String Dim FileID As String Dim xmlhttp As Object Dim name0 As Variant Dim oStream As Object FileID = Split(Split(GDriveURL, "/d/")(1), "/")(0) myURL = "http://drive.google.com/u/0/uc?id=" & FileID & "&export=download" Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") xmlhttp.Open "GET", myURL, False xmlhttp.Send name0 = DECODEURL(xmlhttp.getResponseHeader("Content-Disposition")) If name0 = "" Then MsgBox "الملف غير موجود في الموقع" Exit Sub End If name0 = Split(name0, "*=UTF-8''")(1) 'split after *=UTF-8'' to get utf8 names If xmlhttp.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write xmlhttp.responseBody oStream.SaveToFile CurrentProject.Path & "\" & name0, 2 ' 1 = no overwrite, 2 = overwrite oStream.Close End If Set xmlhttp = Nothing Set oStream = Nothing MsgBox "تم تحميل الملف في نفس مسار البرنامج باسم: " & vbNewLine & vbNewLine & name0 End Sub Function DECODEURL(varText As Variant) Static objHtmlfile As Object If objHtmlfile Is Nothing Then Set objHtmlfile = CreateObject("htmlfile") objHtmlfile.parentWindow.execScript "function decode(s) {return decodeURIComponent(s)}", "jscript" End If DECODEURL = objHtmlfile.parentWindow.decode(varText) End Function طريقة الاستدعاء (الاستخدام): طريقة استخدام الكود مثل السطر المكتوب في الإجراء test أو يمكن وضعه عند الضغط على زر مثلا ويتكون هذا السطر من كتابة اسم الاجراء DpwnloadFromGD ثم رابط الملف المراد تحميله بين علامتي تنصيص Sub test() DownloadFromGD "https://drive.google.com/file/d/18jrvTxgR1QTzwm8YaJHIvsdOmqj02L2x/view" End Sub
  15. وعليكم السلام 🙂 إجعل مصدر البيانات استعلام وقم بتصدير البيانات من الاستعلام ، ثم اطلع على هذا الموضوع :
  16. التطبيق هنا خاطئ ☝🏻️ أنظر إلى كود الأستاذ @ابوخليل :
  17. هذه ليست مجرد رفاهية .. إنما أريد معرفة من أضاف السجل أيضا 😅🖐🏻️ نترقب بشغف
  18. أخي فادي @fadi83 أهلا وسهلا بك في المنتدى 🙂 🌹🌼 نصيحتي لك الآن وفي المشاركات المقبلة أن تقوم بإرفاق نسخة من برنامجك ( الجزئية الخاصة باستفسارك فقط ) لكي تسهل الحل على الإخوة المساعدين .. ولكي تجد المساعدة بسرعة ودقة تناسب احتياجاتك 🙂👌🏻
  19. وعليكم السلام أخي يوسف @يوسف محمد 555 🙂 أهلا وسهلا بك في المنتدى 🙂 🌹🌷🌼 الشرح بدون مرفق فيه صعوبة في فهم الموضوع وتصوره .. أقترح عليك أن ترفق نسخة من برنامجك + ملف الوورد حتى تسهل الموضوع على الإخوة وكي تجد الإجابة سريعا .. 😏
  20. ما شاء الله تبارك الله أستاذ فادي @Foksh إبداع وتميز وجمال 🙂🌹 روعة التصميم ودقة التنفيذ تعبران عن حسك الفني الرائع وإتقانك البديع 🙂👌🏻 عندي ملاحظات تحسينية ليس إلا .. ولا تنقص من حجم العمل وروعته 🙂 : - هناك زري إغلاق (يمين ) و ( أعلى يسار ) أحدهما يغلق البرنامج ويخرج والآخر يقفل النموذج ويبقى الأكسس مفتوحا . - حبذا لو تضيف زر تصغير الشاشة للأسفل Minimize . حبذا لو تضيف خيار تشغيل البرنامج عند تشغيل الكمبيوتر ليعمل البرنامج مباشرة عند تحميل الويندوز . استفسار : ما الداعي لإعادة تشغيل البرنامج بعد تغيير الإعدادات ؟ أليست تتطبق بعد حفظها مباشرة ؟ 🙂
  21. أسعد الله صباحك عمي @ابوخليل 🌹 إبدعت وأجملت 👍🏻🙂 .. حاولت بالطرق السهلة أن أحصل على القيمة السابقة للعمود الثاني ولكن لم أفلح .. ولم أجد خاصية مدمجة تدعم ذلك .. لذلك حسب ما أرى أنه يمكن التغلب على هذه القضية بأحد حلين .. الأول : الطريقة التحايلية بحيث يتم تخزين القيمة السابقة في متغير ثم يتم استدعائها عند الحاجة .. الثاني وهذا ما عملت به في برنامجي سابقا : أن يكون تسجيل التغييرات على مرحلتين .. الأولى : عند إضافة سجل جديد حينها ستتخزن القيمة كإدخال جديد . الثانية : عند تغيير القيمة لاحقا أو عند التعديل ستتخزن القيمة الجديدة فقط ولكن حينها يمكن الرجوع للقيمة القديمة من خلال سجل التعديلات السابقة 🙂 وهذا شكل سجل التعديلات من برنامجي : ستلاحظ أن هناك تعديلات مكتوب عليها (تم إضافة: ...) وأخرى مكتوب عليه ( قام بتعديل : من ... إلى: ..... ) وهذا ينطبق على مربعات النص والقوائم المنسدلة .. إلا أن القوائم المنسدلة متعددة الأعمدة تكتب ( تم التعديل إلى : ... ) فقط هكذا :
  22. مبارك عليك أخي @محمد احمد لطفى 🙂🌹 وفقك الله أينما حللت 🌼🤲🌼
  23. بالنسبة لهذه النقطة عمي @ابوخليل جرب هذه الطريقة للحصول على القيمة النصية بدل الرقمية من النموذج : ' تعطيك القيمة النصية الظاهرة Me.ComboBox.Text ' تعطيك القيمة الرقمية أو الحقيقية للحقل Me.ComboBox.Value 🙂 كم أن لدي نموذج إجتهدت عليه سابقا لتسجيل التغييرات بكل التفاصيل التالية : وسأعرضه لاحقا إن شاء الله للاستفادة 🙂
  24. يمكن الخروج من هذا التعقيد كله بطريقة سهلة 🙂 وذلك بجعل حقل النص من نوع : Long Text وضبط الخيار Text Format إلى : Rich Text ... كما هو واضح في الصورة .. وبعدها ستتمكن من إظهار مربع الخط والألوان بمجرد تظليل النص المراد تنسيقه 🙂 وستتخزن التنسيقات تلقائيا في الجدول .. تنسيق الخط والألوان.accdb
  25. نعم ممكن .. وله طرق متعددة لتنفيذه .. منها أن تحول هذه الأكواد لكودين منفصلين .. وقبل أن تنادي الأكواد تضع متغير يحصي عدد السجلات التي وضع لها علامة الصح DCount، فإن كانت أكبر من واحد فمعناه أن أحد الحقول تم تحديده لذلك ينادي كود إلغاء التحديد للكل .. وإذا كان عدد الحقول المحددة صفر فينادي على كود تحديد الكل .. 🙂
×
×
  • اضف...

Important Information