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

منتصر الانسي

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

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

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

  • Days Won

    62

كل منشورات العضو منتصر الانسي

  1. شكراً أستاذ موسى دائماً ترفع مغنوياتي أولاً بتثبيتك لكل أداة أقوم برفعها وثانياً لردودك التي تجعلني أطمئن بأنها تعمل بنجاح أتمنى أن تكون وجدت إستخداماتها ذات فائدة لإستخدامها ضمن تطبيقاتك
  2. عندما تكون ملفات اكسس بالإمتداد mde أو accde فهذا يعني أنه قد تم تشفيرها وفقاً للبيئة التي تم تشفيرها فيها بالتالي إذا تم تشفيرها في بيئة 32 بت فلن تعمل إلا في بيئة 32 بت ونفس الشيئ لـ 64 بت . هذا يعتمد على نقطة مهمة هل التطبيق وهو بالإمتداد mdb أو accdb يعمل بدون مشاكل في كلا النواتين أم لا؟ فإذا كان يعمل بدون مشاكل فلن يكون هناك أي اكواد بحاجة للتعديل أما إذا كان يعمل في 32 بت ولم يعمل في 64 بت فغالباً ستكون المشكلة في دوال API وحل هذه المشكلة بسيط جدا إفتح محرر الأكواد ومن قائمة Debug --> Compile YourDatabaseName (طبعا سيظهر إسم التطبيق مكان الكلمة YourDatabaseName) وسيتوقف المؤشر عند أول دالة أو إجراء (وغالباً ستبدأ بالكلمة المفتاحية Declare وأحيانا قد تكون هذه الكلمة مسبوقة بكلمة Private أو Public) وسأوضح لك بمثال واقعي هذا المثال يحتوي على دالتين وإجراء API ستعمل في 32 بت فقط ولن تعمل في 64 بت Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Declare Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long قمت بنسخها وذهبت لأداة الأخ موسى وقمت بالخطوات الموضحة بالأصفر تم تحديد خيار (توافق 32/64) ولصقت الكود الأصلي في الجزء الأيمن ثم النقر على زر (تشغيل المعالج) لتم تحويل الكود إلى هذا الشكل #If VBA7 Then Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Declare PtrSafe Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As LongPtr, ByVal lpsz As String, ByVal lpFontEnumProc As LongPtr, ByVal lParam As LongPtr) As Long Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr #Else Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Declare Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long #End If نقوم بإستبدال الثلاثة أسطر الأصلية بهذه النتيجة وبهذا نكون قد حصلنا على كود متوافق مع النواتين قم بتكرار العملية إلى أن يصبح خيار Compile YourDatabaseName غير مفعل كما بالصورة وعندما تجد أن كلمة Compile مع إسم التطبيق أصبح كما بالصورة يكون تطبيقك أصبح جاهز للعمل على النواتين بدون أي مشاكل عندما أقول يعمل على النواتين أقصد وهو بالإمتداد mdb أو accdb أما إذا كان بالإمتداد mde أو accde فإن البيئة التي سيعمل فيها هي نفس البيئة التي تم تشفيره فيها أرجو أن يكون الشرح واضح وإذا كان هناك أي إستفسار آو توضيح فتفضل وأسأل تحياتي
  3. لماذا لاتجرب أداة VBA Code Doctor المقدمة من الأخ @Moosak
  4. Version 1.0.0

    19 تنزيل

    من منا لم يواجه عند تصميم تطبيق ما لحالات تتوقف على إستجابة المستخدم لتوجيه سير العمل بإتجاه مختلف عن الآخر وأغلب هذه الحالات نستخدم فيها مربع الحوار MsgBox فنطلب منه مثلاً الرد بنعم أو لا أو موافق أو إلغاء الأمر .... إلخ حسناً ماذا لو واجهت حالات تتطلب أكثر من ثلاثة خيارات مثلاً وأريد أن تكون هذه الخيارات مكتوبة بشكل صريح فسيكون من الصعب إستخدام MsgBox فنحن سنكون محكومين بمسميات الأزرار الإفتراضية والتي قد لا تعبر عن المطلوب بطريقة صحيحة صحيح أنه يمكننا إستخدام أداة مربع حوار المهام TaskDialog لنحصل على النتيجة المطلوبة وأحسن ولكن قد يرى البعض أنه ليس بحاجة لإستخدامها لأي سبب من الأسباب وسيفضل أن يقوم بإنشاء نموذج مخصص لهذه الحالة فقط ... حسناً وماذا إذا إحتاج إلى قائمة خيارات أخرى؟ عندها سيضطر إلى إنشاء نموذج ثاني وثالث ... وهكذا لكل ما سبق أقدم لكم اليوم أداة أعتبرها من الأدوات المثيرة للإعجاب وذلك لأنها رغم بساطتها إلا أنها تقدم خدمة لاغنى عنها بل وتوفر علينا الكثير من الوقت والجهد ولبساطتها لم أحتاج إلى كتابة أي تعليمات لشرح طريقة عملها فكل ماهو مطلوب هو تعبئة بعض مربعات النص فقط ويمكن مشاهدة النتيجة مباشرة وعند الإنتهاء يتم النقر على زر النسخ ولصق الكود في أي حدث تريد ... هذا كل شيء ماعليك إلى أن تكمل التعليمات البرمجية المترتبة على نتيجة التحديد وكما تعودنا ستجدون في المرفقات ملفي أكسس الأول بإسم القالب ويحتوي على نموذجين ووحدة نمطية والحقيقة أنك لست بحاجة إلا إلى نموذج واحد إلى جانب الوحدة النمطية في النسخ النهائية (وهما ماستجدونهما في النسخة التوضيحية) أما نموذج منشئ صيغة أمر الإستدعاء فلن تحتاجه إلا خلال التطوير وهنا يجب علي أن أتقدم بألشكر للأخ العزيز @Foksh والذي دائماً ما يتحفنا بهدايا تقدم في ظاهرها وظائف رئيسية وفي باطنها تقدم وظائف أخرى فرعية أو مخفية لاتقل في أهميتها عن الوظيفة الأساسية التي تقدمها الأداة ومن ضمن هذه الهدايا المخفية كانت وظيفة تحويل أي تطبيق إلى وظيفة إضافية Add-in لذا فقد قمت بإستخدام الكود الخاص به لمنح إمكانية حفظ الأداة كوظيفة إضافية ليمكن للجميع الإستفادة من الإداة في جميع تطبيقات أكسس دون الحاجة إلى إستيراد نموذج منشئ صيغة أمر الإستدعاء ملف أكسس الآخر فهو بإسم (النسخة التوضيحية) وستجدون فيه بعض الأمثلة لطريقة الإستفادة من الأداة (أحد الأمثلة أعتبره هدية بحد ذاته) ملاحظة مهمة : أرجو قراءة التعليقات المرفقة بالكود الخاص بكل زر أمر لكل مثال فستجدون فيها توضيح لكل إجراء في الأخير أرجو أن تنال الأداة إعجابكم وأن تجدو فيها الفائدة في أعمالكم وإذا كان لدى أي أحد أي إستفسار أو ملاحظة فلا يبخل علينا بها تحياتي
  5. اعرض الملف أداة إنشاء مجموعات الخيارات المخصصة {سلسلة الأدوات المساعدة المخصصة} من منا لم يواجه عند تصميم تطبيق ما لحالات تتوقف على إستجابة المستخدم لتوجيه سير العمل بإتجاه مختلف عن الآخر وأغلب هذه الحالات نستخدم فيها مربع الحوار MsgBox فنطلب منه مثلاً الرد بنعم أو لا أو موافق أو إلغاء الأمر .... إلخ حسناً ماذا لو واجهت حالات تتطلب أكثر من ثلاثة خيارات مثلاً وأريد أن تكون هذه الخيارات مكتوبة بشكل صريح فسيكون من الصعب إستخدام MsgBox فنحن سنكون محكومين بمسميات الأزرار الإفتراضية والتي قد لا تعبر عن المطلوب بطريقة صحيحة صحيح أنه يمكننا إستخدام أداة مربع حوار المهام TaskDialog لنحصل على النتيجة المطلوبة وأحسن ولكن قد يرى البعض أنه ليس بحاجة لإستخدامها لأي سبب من الأسباب وسيفضل أن يقوم بإنشاء نموذج مخصص لهذه الحالة فقط ... حسناً وماذا إذا إحتاج إلى قائمة خيارات أخرى؟ عندها سيضطر إلى إنشاء نموذج ثاني وثالث ... وهكذا لكل ما سبق أقدم لكم اليوم أداة أعتبرها من الأدوات المثيرة للإعجاب وذلك لأنها رغم بساطتها إلا أنها تقدم خدمة لاغنى عنها بل وتوفر علينا الكثير من الوقت والجهد ولبساطتها لم أحتاج إلى كتابة أي تعليمات لشرح طريقة عملها فكل ماهو مطلوب هو تعبئة بعض مربعات النص فقط ويمكن مشاهدة النتيجة مباشرة وعند الإنتهاء يتم النقر على زر النسخ ولصق الكود في أي حدث تريد ... هذا كل شيء ماعليك إلى أن تكمل التعليمات البرمجية المترتبة على نتيجة التحديد وكما تعودنا ستجدون في المرفقات ملفي أكسس الأول بإسم القالب ويحتوي على نموذجين ووحدة نمطية والحقيقة أنك لست بحاجة إلا إلى نموذج واحد إلى جانب الوحدة النمطية في النسخ النهائية (وهما ماستجدونهما في النسخة التوضيحية) أما نموذج منشئ صيغة أمر الإستدعاء فلن تحتاجه إلا خلال التطوير وهنا يجب علي أن أتقدم بألشكر للأخ العزيز @Foksh والذي دائماً ما يتحفنا بهدايا تقدم في ظاهرها وظائف رئيسية وفي باطنها تقدم وظائف أخرى فرعية أو مخفية لاتقل في أهميتها عن الوظيفة الأساسية التي تقدمها الأداة ومن ضمن هذه الهدايا المخفية كانت وظيفة تحويل أي تطبيق إلى وظيفة إضافية Add-in لذا فقد قمت بإستخدام الكود الخاص به لمنح إمكانية حفظ الأداة كوظيفة إضافية ليمكن للجميع الإستفادة من الإداة في جميع تطبيقات أكسس دون الحاجة إلى إستيراد نموذج منشئ صيغة أمر الإستدعاء ملف أكسس الآخر فهو بإسم (النسخة التوضيحية) وستجدون فيه بعض الأمثلة لطريقة الإستفادة من الأداة (أحد الأمثلة أعتبره هدية بحد ذاته) ملاحظة مهمة : أرجو قراءة التعليقات المرفقة بالكود الخاص بكل زر أمر لكل مثال فستجدون فيها توضيح لكل إجراء في الأخير أرجو أن تنال الأداة إعجابكم وأن تجدو فيها الفائدة في أعمالكم وإذا كان لدى أي أحد أي إستفسار أو ملاحظة فلا يبخل علينا بها تحياتي صاحب الملف منتصر الانسي تمت الاضافه 09/01/26 الاقسام قسم الأكسيس  
  6. لإستخدام دالة DLookup يجب معرفة الحقل أو الحقول المشتركة بين الإستعلامين بمعنى هل تريد إرجاع قيمة الحقل لنفس الشهر أو الشهر والسنة أم ماذا؟ وسيكون من الأسهل لو تم إرفاق مثال للتعديل عليه
  7. اجعل مسميات مربعات النص بالعربي
  8. طالما ظهرت بيانات في المثال الذي ارفقته لك فهذا يعني انه لم يتم تطبيق الحل بشكل صحيح يجب فهم الحل أولاً ليسهل تطبيقه مهما إختلفت بيئة العمل الحل كان يعتمد على إنشاء مربعي نص (txtFrom , txtTo) والذي من المفترض أنهما سيكونان مخفيان ولكني أبقيتهما ظاهران لغرض التوضيح عند النقر على أحد الأزرار الأربعة تحت التاريخين (mn و el) سيتم نقل هذين التاريخين إلى مربعي النص (txtFrom , txtTo) أما عند النقر على أحد الأزرار الأربعة تحت السنة سحتوي مربع النص txtFrom على تاريخ أول يوم في السنة المحددة وسيختوي مربع النص txtTo على تاريخ آخر يوم لنفس السنة وبهذا نكون قد وحدنا مصدر تاريخي بداية ونهاية الفترة للحالتين ليكون معيار التصفية للتقارير في معايير التصفية الخاصة بالاستعلام خلف التقريرين جعلت معيار تصفية حقل تاريخ بداية الإجازة مابين التاريخين في مربعي النص (txtFrom , txtTo) بالاضافة الى معيار التصفية لنوع الإجازة ورقم الملف للتقارير الخاصة بالموظف أرجو أن يكون الشرح واضح واذا كان هناك اي نقطة غير مفهومة فلا تتاخر في طلب توضيحها تحياتي
  9. غير متأكد إذا فهمت الطلب صح ولكن تفضل جرب المرفق وحدة الاجازات السنوية.accdb
  10. تم تعديل المرفق بحيث يتم تجميع عدد الأيام من حقل Mod2 في الإستعلام وتم إضافة دالة لتحويل عدد الأيام هذه إلى سنة - شهر - يوم تحياتي وحدة الاجازات السنوية.accdb
  11. هذه النقطة تم حلها عن طريق التنسيق الشرطي هذه الرسالة كانت تظهر بسبب الحقل Mod2 المحتسب داخل الإستعلام والحقيقة لا يوجد سبب واضح لظهور الرسالة ويوجد لهذه المشكلة حلين الأول - أن تقوم بحذف مربع النص وإدراجه مرة أخرى (وهو ماتم في المرفق) الثاني بالإستغناء عن الحقل وأن نجعل الإحتساب يتم داخل مربع النص كما هو موضح بالصورة التالية الطلب الثالث كان كما وضحته أنت بالمثال وهذه هي النتيجة فهل كان المطلوب غير ماجاء هنا تم إرفاق الملف بعد إضافة كود الحذف للزر تحياتي وحدة الاجازات السنوية.accdb
  12. تفضل جرب الملف بعد التعديل وحدة الاجازات السنوية.accdb
  13. بالفعل يبدو أن المشكلة فردية سأحاول البحث عن سببها شكراً لك أخي على التوضيح
  14. ماشاء الله عليك باشمهندس @Foksh في البداية إسمح لي أخي العزيز أن إبدي إعجابي على طريقة تصميمك للواجهات ياحي تحسسنا إننا أمام برنامج معمول بلغة ++C أو C شارب ولا يقل عن أي برنامج من برامج ويندوز الأخرى ماشاء الله عليك والله إني أغبطك على هذه الموهبة الفنية لديك في طريقة التصميم وإختيار الألوان وتنسيق الأزرار ووووو وكما تقولو في بلاد الشام (شو بدي إحكي تا إحكي ) المهم أستاذي قمت بإستخدام الأداة وعملت بنجاح ولكني واجهت مشكلة عندما يكون إسم التطبيق مكتوب بالعربي فهذه كانت النتيجة لا أدري هل المشكلة هذه تظهر عند الجميع أم إنها مقتصرة على جهازي هذا فقط لو كانت عامة فأعتقد أن هناك مشكلة في التعامل مع حروف Unicode وإذا كانت خاصة بي فقد تكون مرتبطة بإعدادات ويندوز أرجو الإفادة إذا واجه أحد غيري هذه المشكلة تحياتي
  15. وهذه مساهمتي بإستخدام أداة مربع القائمة المخصص من سلسلة الأدوات المساعدة المخصصة وهذه المساهمة أتت بفائدة حيث قمت بإضافة وظيفة جديدة لتحديد كل الخيارات والتي لم تكن موجودة في النسخة الأصلية أرجو أن تنال إستحسانكم تحياتي التحدي 14 - فلترة متعددة بإستخدام أداة القوائم المخصصة.accdb
  16. يبدو أن بيني وبين أخي @Moosak توارد خواطر فقد كان تركيزنا على حل المشكلة موضوع التحدي وهي مشكلة إختفاء نصوص مربعات التحرير والسرد , كذلك التشابه الكبير بين فكرتي وفكرته الأولى وأقول هذا لأن حلينا يقومان على أساس مربع نص + مربع تحرير وسرد مع إختلاف بسيط في نقطة واحدة ففي البداية كانت طريقة العمل عندي أني أجعل عرض مربع التحرير والسرد بعرض السهم فقط وبقية المسافة يغطيها مربع النص ولكني لاحظت أننا سنخسر وظيفة هامة وهي وظيفة الإكمال التلقائي للنص فلو كان لدينا قائمة كبيرة فمن غير العملي أن نظل ننزل إلى أن نجد القيمة المطلوبة ولكن وظيفة الإكمال التلقائي تجعلنا نقفز إلى القيمة المطلوبة بمجرد كتابة الأحرف الأولى لذلك توصلت للفكرة التي نفذتها وهي أن أجعل عرض مربع التحرير والسرد تساوي عرض مربع النص + مسافة تساوي عرض السهم وجعلته خلف مربع النص عن طريق النقر عليه بالزر الأيمن وتحديد الموضع (Position) - إرسال إلى الخلف (Send to Back) ثم وبإستخدام الكود وبمجرد إنتقال التركيز إلى مربع النص ييم نقل التركيز آلياً إلى مربع التحرير والسرد (الذي لن يكون فارغاً بالطبع) وعند الخروج من مربع التحرير والسرد يعود مربع النص للواجهة وبهذا نكون قد حصلنا على أفضل مافي العالمين وبدون أن يشعر المستخدم العادي بأي فرق. وكما كنت قد ذكرت فهذا الحل قابل للتطوير فمثلاً يمكننا كتابة كود يقوم بمطابقة خصائص مربع النص مع مربع التحرير والسرد مثل الطول والعرض والموقع ونوع وحجم الخط .... إلخ لنحصل على تطابق تام ولا يكون هناك أي مجال لظهور خلل أثناء التنقل بين عناصر التحكم تحياتي
  17. لم أقل مختلفة بل قلت بأنها في الفيديو كانت داخل وحدة نمطية قام صاحب الفيديو بإستيرادها إلى تطبيقه بينما في المثال الذي أشرت إليه لا يوجد وحدة نمطية بل كانت جميع الأكواد خلف النموذج فشعرت أن سبب طرح الأخ @حسين العربى لهذا الموضوع كان سببه هذا الإلتباس فعند تطبيقه لما جاء في الفيديو لن يجد الوحدة النمطية لإستيرادها خصوصاً أنه قال بأنه قد إستعرض المثالين لذلك قمت بفصل الوظائف الأساسية في وحدة نمطية وأصبح المثال الآن قابل لتطبيق ماجاء في الفيديو عليه تحياتي
  18. الملف المرفق في المنتدى غير مطابق لما جاء في الفيديو ففي الفيديو كان هناك وحدة نمطية تضم حميع الأكواد المطلوبة بينما في المثال الذي شاركه الأخ @Foksh كانت جميع الأكواد خلف النموذج لذا قمت بتحويل الوظائف الأساسية الواردة في المثال إلى وظائف عامة داخل وحدة نمطية مع توضيح الأسطر التي يجب نسخها إلى النموذج قمت كذلك بتطبيق الحل على نموذج جديد بإسم Form1 ومع إحترامي لصاحب الفيديو فالتعديلات التي قام بها على خصائص النموذج كأن يكون منبثق أو التوسيط التلقائي .... إلخ ليست من شروط تنفيذ الكود (وهذا ما سنجده في النموذج Form1 فلم يتم تعديل أي خاصية من الخصائص الواردة في الفيديو) وأعتقد أن سبب ذكره لها هو للوصول إلى النتيجة التي إستعرضها بداية الفيديو والغرض منها هو غرض جمالي لاغير , حبيت أوضح النقطة لأي شخص سيواجه أي تعارضات في عمله مع ماذكر من التعديلات التعديل الجوهري المطلوب كشرط لتنفيذ الكود هو شرط إظهار مقطعي رأس وتذييل النموذج (ستجد في نموذج Form1 كل مايجب عمله للإستفادة من الكود) تحياتي ملاءمة عناصر النموذج حسب حجم النموذج ☺.mdb
  19. كان ينقصك ترحيل بيانات الجدول Tbl_Lab_Requests الخاصة بالسجل المحدد تم تعديل المرفق lab.rar
  20. سأكون أول المشاركين فكرتي المتواضعة تعتمد على أن يتم إنشاء مربعات نص تحتوي على دالة Dlookup لإرجاع قيمة كل مربع تحرير وسرد ويكون مربع النص هذا فوق (أو أمام) مربع التحرير والسرد ويكون بنفس عرض مربع التحرير والسرد (بدون السهم) والتريكة هنا أنه حين إنتقال المؤشر إلى مربع النص ينتقل مباشرة إلى مربع التحرير والسرد الخاص به وعند الخروج من مربع التحرير يعود مربع النص إلى الواجهة لأنه سبق وتم تحديد موقعه في الأمام وبهذا لن يشعر المستخدم بوجوده الفكرة والتنفيذ تمت على عجل ولا شك أنها قابلة للتحسين تحياتي التحدي الرابع.accdb
  21. إمتداد الملف هو mde وقد تم تشفيره بإستخدام أوفيس 2003 وهي نسخة من الإصدار 32bit لذا لن تستطيع فتحه إلا بإستخدام أي نسخة من أوفيس (أي نسخة لايهم) بشرط أن تكون إصدار 32bit
  22. أشكر أخي العزيز @Moosak على مساعدته القيمة في إختبار الأداة ونتيجة لهذه المساعدة قمت بإعداد ورفع إصدار ثاني من الأداة تم فيها إصلاح الخطأ الذي يظهر نتيجة تجاوز عدد الخطوط المنزلة على الجهاز أكثر من 500 خط والذي كان يظهر في الإصدار الأول كما جاء في ملاحظة الاخ موسى فأصبح لدينا الآن إجراء جديد يتم فيه سرد قائمة الخطوط والإحتفاظ بها في جدول (يتم مرة واحدة بعد أول تشغيل للأداة أو بعد تنزيل خطوط جديدة إلى الجهاز) لذلك إذا كان جهازك يحتوي على عدد خطوط أقل من 500 خط وتكون متأكد من أنك لن تتجاوز هذه العدد من الخطوط في المستقبل فلا يوجد فرق سواء إستخدمت الإصدار 1 أو 2 لا مشكلة , غير ذلك فيلزمك العمل بإستخدام الإصدار 2 تحياتي
  23. مع الأسف عنصر تحكم المتصفح Edge غير موجود إلا في الإصدار 365 وأعتقد والله أعلم 2024 وهذا ما ذكرته في التعليمات المرفقة والذي كان السبب في رفع نسختين من الأداة غريبة فعنصر التحكم Edge لايحتاج إلى توافق كعنصر تحكم المتصفح IE ولكن وللتأكد فقط أرجو منك تنزيل النسخة الأصلية من هذا الرابط وتجربتها فإذا عملت معك فستكون المشكلة في الأداة الخاصة بي مالم فستكون في نسخة أوفيس عندك سبب هذا الخطأ كما يتضح لي من هذه الرسالة أن عدد الخطوط عندك كبير جداً أكبر من الحد الأقصى لقائمة القيم والتي يجب أن لا تتجاوز 520 عنصر (والله مش متأكد من الرقم بالضبط ولكنه في هذا الإطار) وهذا هو السبب ولكني سأحاول معالجة المشكلة عن طريق ترحيل الخطوط إلى جدول تحياتي
×
×
  • اضف...

Important Information