نجوم المشاركات
Popular Content
Showing content with the highest reputation since 02/16/26 in all areas
-
6 points
-
أهلاً بكم في التحدي الثاني من سلسلة "الفعاليات والتحديات الشهرية". بعد الإستفتاء والإستطلاع الذي تم ؛ وقع اختيار المصوتين على الموضوع :- 2️⃣ إنشاء نظام تسجيل دخول احترافي برمجياً ، مع نظام صلاحيات متعدد المستويات .. وعليه ، فأن هذا التحدي محفوف بالإثارة والمتعة الكبيرين لأنه سيكون مفتوح الأفق من أوسع أبوابه بحيث ستكون :- 📖 قصة التحدي :- طلب منك عزيزي المشارك ( المصنع التقني نفسه ) بناء نظام تسجيل دخول محترف وعالي الجودة برمجياً وتصميمياً كواجهة ، يتمتع بمزايا تمنح المسؤول منح الصلاحيات للمستخدمين بطريقة قوية ومتينة . 🛠️ المطلوب :- إنشاء جدول باسم tbl_Users للمستخدمين ، وأي جداول أخرى تحتاجها لإدارة الصلاحيات . 🚫 شروط التحدي :- يجب عليك ضبط إعدادات التحدي ، بحيث يكون هناك جزء لإدارة المستخدمين وكلمات المرور ، والصلاحيات بالطريقة التي تريدها وتراها في مخيلتك الواسعة . دون أي قيود في تنفيذ الفكرة . 🚫 قوانين المشاركة :- السقف مفتوح للمشاركين بالطريقة والوسيلة والأسلوب الذي يراه مناسباً لتنفيذه الفكرة . استخدام واجهة جذابة لواجهة تسجيل الدخول . أو واجهة الإعدادات والصلاحيات . مدة الإشتراك بتقديم الأعمال والأفكار سيكون 30 يوماً من تاريخ الموضوع اليوم 10-03-2026 ، وتنتهي بإذن الله بتاريخ 10-04-2026 ♻ كيف تشارك ؟ قم برفع ملف مرفق فقط . وتذكر أنك عزيزي المشارك تملك الحق في 3 محاولات لإجاباتك خلال التحدي الواحد فقط .4 points
-
أخواني وأساتذتي ومعلمينا ( دون استثناء ) ابدأ مووعي هذا بسؤال يلامس ( نقاط الألم ) لدى المبرمجين :- هل سبق لك أن ورثت قاعدة بيانات اكسيس بآلاف السطور البرمجية وشعرت بالضياع مع كثرة الدوال والأكواد ؟ هل تبحث عن طريقة سحرية لتنظيف مشروعك من الأكواد الميتة والإجراءات غير المستخدمة ؟ هل تواجه مشاكل في توافق أكواد Windows API بين إصدارات Office 32-bit و 64-bit ؟ أهلاً بك في عالم Access Code Explorer - أول وأقوى مدير متكامل لمشاريع Access/VBA في العالم العربي . هذه ليست مجرد أداة ، بل مشروع متكامل يحول الـاكسيس الخاص بك إلى بيئة تطوير محترفة (IDE) بمعنى الكلمة . 1️⃣ القسم الأول : التحليل والاستكشاف (Analysis & Exploration) :- مستكشف الكائنات الذكي : شجرة متكاملة تعرض كل مكونات المشروع من ( جداول ، استعلامات ، نماذج ، تقارير ، موديولات و كلاسات ) بطريقة منظمة وقابلة للطي والفتح ( نظام الشجرة في ليست بوكس ). البحث العميق : ابحث عن أي نص برمجي أو كلمة في جميع الإجراءات والاستعلامات دفعة واحدة . الأداة ستظهر لك النتائج وتضع علامة مرجعية على السطر الذي تم العثور عليه داخل الكود ! عرض SQL بشكل احترافي : عند اختيار أي استعلام ، ترى كوده مع تصنيف لنوعه ( استعلام تحديث ، إضافة ، حذف ، توحيد ... إلخ ) وإمكانية تحويله إلى كود VBA جاهز بنقرة واحدة . إحصائيات دقيقة : عرض عدد الجداول ، الاستعلامات ، النماذج ، التقارير ، الموديولات ، الكلاسات ، وإجمالي سطور الأكواد في مشروعك . الأداة قادرة على اكتشاف إصدار الأوفيس ونواته ، وإصدار الويندوز ونواته أيضاً في التعليق التوضيحي للنموذج عند فتحه . 2️⃣ القسم الثاني : أدوات الصيانة والتحسين ( Maintenance & Optimization ) :- 🧹 كشف وإزالة الإجراءات غير المستخدمة ( Dead Code ) :- يقوم بتحليل علاقات الاستدعاءات بين الإجراءات ( Call Graph ) . يحدد بدقة الإجراءات التي لا يتم استدعاؤها من أي مكان . ميزة الأمان : يقوم بإنشاء نسخة احتياطية تلقائية لجميع الإجراءات قبل حذفها ! 3️⃣ القسم الثالث : مصحح الأكواد الشامل (VBA Fixer) :- إزالة الأسطر الفارغة المكررة . حذف الإجراءات الفارغة . تعطيل أو إزالة أوامر Debug.Print و Stop . إعادة تنسيق الكود بالكامل ( Code Formatting ) مع مسافات بادئة ذكية . اكتشاف وإصلاح أخطاء معالج الأخطاء ( On Error Goto ) الميتة . إضافة ( On Error GoTo 0 ) المفقودة بعد استخدام ( On Error Resume Next ) . توحيد وإصلاح أسطر Option Explicit و Option Compare في كل الموديولات والكائنات . اكتشاف المتغيرات غير المستخدمة . ( سيتم إضافته قريباً ) وضعان للتشغيل : 🌐 الوضع الشامل : لتحليل وإصلاح المشروع بأكمله . 🎯 الوضع الفردي : لتحليل وإصلاح إجراء واحد فقط ( الذي تحدده في القائمة ) . 4️⃣ القسم الرابع : ثورة إدارة Windows APIs :- 📚 مكتبة APIs مدمجة : تحتوي على عشرات من أشهر دوال Windows API مصنفة حسب الوظيفة ( Window, File, Registry, Process, Memory, Network... ). 🧠 كشف وحل مشاكل التوافق ( API Compatibility Checker ) :- يكتشف تلقائياً الـ APIs المكررة في جميع أنحاء المشروع . يحدد لك أفضل مكان للاحتفاظ بالـ API ( يفضل الموديولات العامة ) . يكشف مشاكل الـ 64-bit : يجد جميع الدوال التي تفتقد إلى PtrSafe أو تستخدم Long بدلاً من LongPtr . 💉 حقن وإدراج الـ APIs بذكاء : على سبيل المثال ؛ إذا استخدمت دالة CreateFile في كودك ولم تعلن عنها ، الأداة تكتشف ذلك وتقوم بإضافتها تلقائياً إلى موديول مركزي Mod_Foksh وتحويلها إلى Public لتكون متاحة في كل مكان . 📝 شرح وأمثلة استخدام : لكل API في المكتبة شرح مبسط وأمثلة جاهزة للنسخ واللصق . 5️⃣ القسم الخامس : واجهة مستخدم ذكية :- أزرار تحكم سريعة : طي/ فتح كل المجموعات بنقرة واحدة ، ترتيب الإجراءات تصاعدي/تنازلي . قوائم منظمة (Menus) : تم تقسيم الأدوات إلى قائمتين (Menu01, Menu02) لتجنب ازدحام الواجهة . مؤشرات بصرية : أثناء عمليات الإصلاح الطويلة ، ترى أي جزء يعمل حالياً من خلال تغير لون التسميات التوضيحية . ☢ متطلبات التشغيل (Requirements) :- مايكروسوفت اكسيس 2010 أو أحدث (يفضل 2013/2016/365) . ♻ طريقة التثبيت ( Installation ) :- قم بفتح قاعدة البيانات التي ترغب في تحليلها . فقط قم باستيراد ( نسخ و لصق ) النموذج Frm_Foksh إلى مشروعك . قم بفتح النموذج . الأداة ستقوم تلقائياً بإنشاء الجداول اللازمة عند أول تشغيل . استمتع بالمستوى الجديد من التحكم ! ‼ تعليمات الأمان ( Safety Instructions - مهم جداً ) :- ⚠️ تنبيه هام قبل استخدام أي ميزة للحذف ( مثل Delete Unused Procedures ) ، الأداة تقوم تلقائياً بإنشاء نسخة احتياطية بصيغة txt في نفس مجلد قاعدة البيانات الحالية . يُنصح دائماً بأخذ نسخة احتياطية كاملة من ملف قاعدة البيانات قبل تجربة أدوات التعديل الجماعي . إذا كان مشروعك محمي بكلمة مرور ، الأداة لن تتمكن من قراءة الأكواد حتى تقوم بإلغاء الحماية مؤقتاً . 📸 واجهة الأداة المتواضعة :- قد لا تخلو الأداة من بعض الأخطاء البسيطة حالياً في الواجهة ، ولكن الوظائف جميعها تعمل بشكل سليم . والأخطاء الواردة قد تكون في ضبط عناصر الواجهة ليس إلا . ⛔ لا تحاول التغيير في الأكواد الخاصة بالنموذج ، ما لم تكن على دراية كافية بما تقوم به من تعديلات ⛔ ملف الأداة للتحميل :- Access KitTools - Master 1.0.accdb.zip3 points
-
أثناء بحثي ضمن مخزون تطبيقات الاكسس عندي للبحث عن أفكار جديدة أستخدمها كموضوع لأداة جديدة أضيفها لسلسلة الأدوات المساعدة المخصصة وقع بيدي ملف كنت قد حملته منذ سنوات من أحد المنتديات الأجنبية وقد كان عبارة عن تحدي أو لغز غريب وهو عن مربع تحرير وسرد يحتوي على قائمة عناصر ولكن عند فتحه في وضع التصميم لا نجد أي عناصر في مصدر الصف الخاص بالقائمة والحقيقة أني وأثناء محاولاتي لحل اللغز وجدت أنه في مضمونة يتكون من أكثر من سؤال 1- كيف تم إضافة عناصر القائمة؟ 2- كيف يمكن حذف تلك العناصر؟ 3- أين يتم حفظ القائمة؟ وحتى أكون صادقاً في كلامي فقد إستطعت حل السؤالين 1 و 2 أما 3 فلم أعرف إجابته إلا بالبحث في الإنترنت وبصراحة أني عند إسترجاع ذكريات محاولاتي لحل اللغز إسترجعت المتعة التي وجدتها في المحاولة بحد ذاتها ناهيك عن متعة إيجادي للحل فأتمنى أن تجدوا تلك المتعة أثناء محاولتكم (طبعاً لمن لم يمر عليهم هذا اللغز من قبل) في الأخير إذا أردتم مني إجابة أي سؤال فأنا مستعد ولكني سأؤجل الإجابة حتى لا تفسد المتعة لمحبي الألغاز لغز.rar3 points
-
أخواني وأساتذتي ومعلمينا ( دون استثناء ) بعد المعاناة التي تواجه كل مبرمج أو هاوي أو محترف في التعامل مع الصور داخل آكسيس ، بوجود الترميش أو الوميض . وكنت قد طرحت تساؤلاً حول آلية تجنب هذه المشكلة عند تعامل آكسيس مع الصور داخل النماذج الحركية . خرجت بهذه الفكرة البسيطة والتي آمل أن تكون الحل الشافي لهذه المعضلة - كما عودناكم دائماً - بإيجاد الحل السحري لها . الفكرة تم ترجمتها بأسلوب بسيط بحيث نجعل النموذج يقوم برسم الأحداث دفعة واحدة بدلاً من رسم كل حركة بشكل منفصل أثناء التعامل مع الصور . الدالة المستخدمة :- '********************************************** '*** *** '*** FFFFFF OOO KK KK SSSS HH HH *** '*** FF O O KK KK SS HH HH *** '*** FFFFF O O KKK SS HHHHHH *** '*** FF O O KK KK SS HH HH *** '*** FF OOO KK KK SSSSS HH HH *** '*** *** '********* Anti Flicker By Foksh 2026 ********* Option Compare Database Option Explicit #If VBA7 Then Private Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" _ (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr Private Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" _ (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr Private Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal hWnd As LongPtr, ByVal hWndInsertAfter As LongPtr, _ ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _ ByVal uFlags As Long) As Long #Else Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function SetWindowPos Lib "user32" _ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _ ByVal uFlags As Long) As Long #End If Private Const GWL_EXSTYLE As Long = -20 Private Const WS_EX_COMPOSITED As Long = &H2000000 Private Const SWP_NOMOVE As Long = &H2 Private Const SWP_NOSIZE As Long = &H1 Private Const SWP_NOZORDER As Long = &H4 Private Const SWP_FRAMECHANGED As Long = &H20 Public Sub Form_SetComposited(ByVal frm As Access.Form, ByVal EnableIt As Boolean) On Error Resume Next #If VBA7 Then Dim h As LongPtr: h = frm.hWnd Dim ex As LongPtr: ex = GetWindowLongPtr(h, GWL_EXSTYLE) If EnableIt Then If (ex And WS_EX_COMPOSITED) = 0 Then Call SetWindowLongPtr(h, GWL_EXSTYLE, (ex Or WS_EX_COMPOSITED)) End If Else If (ex And WS_EX_COMPOSITED) <> 0 Then Call SetWindowLongPtr(h, GWL_EXSTYLE, (ex And Not WS_EX_COMPOSITED)) End If End If Call SetWindowPos(h, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED) #Else Dim h32 As Long: h32 = frm.hWnd Dim ex32 As Long: ex32 = GetWindowLong(h32, GWL_EXSTYLE) If EnableIt Then If (ex32 And WS_EX_COMPOSITED) = 0 Then Call SetWindowLong(h32, GWL_EXSTYLE, (ex32 Or WS_EX_COMPOSITED)) End If Else If (ex32 And WS_EX_COMPOSITED) <> 0 Then Call SetWindowLong(h32, GWL_EXSTYLE, (ex32 And Not WS_EX_COMPOSITED)) End If End If Call SetWindowPos(h32, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED) #End If End Sub مع ترك المساحة بالتفعيل أو التعطيل حسب الحاجة . بحيث يتم الاستدعاء لها في حدث عند التحميل للنموذج بهذا الأسلوب البسيط :- Form_SetComposited Me, True أو التعطيل بهذا الشكل :- Form_SetComposited Me, False الملف مفتوح المصدر . لمن يرغب بالتجربة على مشروعه ، فضلاً وكرماً منه بإخباري بالنتيجة أن كانت ناجحة أم لا . علماً أنه تم استخدام الفكرة نفسها في إنشاء لعبة الأونو في هذا الموضوع مسبقاً ، والنتيجة كما شاهدتموها في أداء اللعبة والتعامل مع الصور بشكل دقيق لتخرج اللعبة كتجربة دون أي ترميش أو وميض عند حركة الصور داخل النماذج . Anti Flicker.accdb3 points
-
Version 1.0.0
23 تنزيل
أقدم لكم اليوم أداة بسيطة في شكلها ولكنها فريدة في نتائجها خصوصاً لم يستهويهم التميز في شكل النماذج الخاصة بهم فمثلاً إذا رغبت بالحصول على شريط عنوان ملون لنماذجك وتخصيص لون انص العنوان كما بالصورة أو رغبت بتخصيص لون حدود النموذج كم بالصورة أو رغبت في تحديد شكل زوايا النموذج كما بالصورة وأخيراً وهذه هي الميزة الأفضل من وجهة نظري وهي أن تجعل شريط العنوان شفاف كما بالصورة إذا كنت تريد الحصول على أي من النتائج أعلاه فهذه الأداة هي كل ما تحتاجه مرفق لكم ملف مضغوط بداخله ملف أكسس ومستند وورد يشرح كل ما تحتاج معرفته للإستفادة من الأداة في تطبيقاتك الخاصة هناك ملاحظتين رغم أنها مذكورة في اكثر من مكان في المرفقات إلا أنه ولأهميتها يجب ذكرهما هنا فبحسب المصدر فإن هذه الأداة لن تعمل إلا في Windows 11 فقط لذا لو جربها أحدكم في إصدارات أخرى فياريت يعلمنا إذا إشتغلت معه أم لا الملاحظة الثانية لن تظهر نتائج الأداة إلا في النماذج المنبثقة بمعنى أنه يجب أن يتم تعيين القيمة (نعم - Yes) لخاصية (منبثق - Pop Up) تحياتي3 points -
في هذا الموضوع سنستعرض دالتين احترافيتين CountWeekday – لحساب عدد أيام محددة بين تاريخين CalculateMonthStats – لحساب إحصائيات شهرية لأي فترة زمنية الدوال مرنة، سريعة، وصحيحة حتى في الفترات الطويلة، ويمكن استخدامها لأي يوم من أيام الأسبوع وليس فقط الجمعة والسبت تعريف أيام الأسبوع Public Enum WeekDays wdSunday = 1 wdMonday = 2 wdTuesday = 3 wdWednesday = 4 wdThursday = 5 wdFriday = 6 wdSaturday = 7 End Enum دالة CountWeekday تحسب عدد أي يوم تختاره بين تاريخين مرنة: يمكن استخدامها لحساب أيام الأحد، الإثنين، الأربعاء، الجمعة … إلخ. سريعة وفعّالة دون الحاجة لتكرار كل يوم في الفترة. تتعامل مع التاريخ بشكل صحيح . الكود Public Function CountWeekday( _ ByVal StartDate As Date, _ ByVal EndDate As Date, _ ByVal TargetDay As WeekDays) As Long Dim TotalDays As Long, BaseCount As Long, ExtraDays As Long Dim FirstDay As Long, Offset As Long If StartDate > EndDate Then Exit Function TotalDays = DateDiff("d", StartDate, EndDate) + 1 If TotalDays <= 0 Then Exit Function BaseCount = TotalDays \ 7 ExtraDays = TotalDays Mod 7 FirstDay = Weekday(StartDate, vbSunday) Offset = (TargetDay - FirstDay + 7) Mod 7 CountWeekday = BaseCount If Offset < ExtraDays Then CountWeekday = CountWeekday + 1 End Function ------ دالة CalculateMonthStats تحسب إحصائيات الشهر: عدد الأيام الإجمالي عدد أيام الجمعة والسبت (يمكن تعديلها لأي أيام أخرى) عدد أيام العمل (باقي الأيام) الكود Public Type TMonthStats MonthName As String CalendarYear As Long FridayCount As Long SaturdayCount As Long TotalDays As Long WorkingDays As Long End Type Public Const MONTH_NAMES_AR As String = "يناير,فبراير,مارس,ابريل,مايو,يونيو,يوليو,أغسطس,سبتمبر,اكتوبر,نوفمبر,ديسمبر" Public Function GetArabicMonthName(ByVal MonthNumber As Long) As String Static arrMonths As Variant If IsEmpty(arrMonths) Then arrMonths = Split(MONTH_NAMES_AR, ",") If MonthNumber >= 1 And MonthNumber <= 12 Then GetArabicMonthName = arrMonths(MonthNumber - 1) End Function Public Function CalculateMonthStats( _ ByVal StartDate As Date, _ ByVal EndDate As Date, _ ByVal MonthNumber As Long, _ ByVal YearNumber As Long) As TMonthStats Dim result As TMonthStats result.MonthName = GetArabicMonthName(MonthNumber) result.CalendarYear = YearNumber result.TotalDays = DateDiff("d", StartDate, EndDate) + 1 result.FridayCount = CountWeekday(StartDate, EndDate, wdFriday) result.SaturdayCount = CountWeekday(StartDate, EndDate, wdSaturday) result.WorkingDays = result.TotalDays - result.FridayCount - result.SaturdayCount CalculateMonthStats = result End Function مميزات الدوال مرنة: تعمل لأي يوم تختاره سريعة وفعالة: تعتمد على القسمة والحسابات الرياضية صحيحة للفترات الطويلة: سواء أيام، أشهر أو سنوات تحقق تلقائي: لا تنتج أخطاء إذا كان تاريخ البداية أكبر من النهاية سهل التعديل: يمكن استخدام CountWeekday لحساب أيام محددة أخرى داخل CalculateMonthStats الفكرة العامة: باستخدام هاتين الدالتين، يمكنك: حساب عدد أي يوم من أيام الأسبوع بين تاريخين. بناء تقارير شهرية مع إحصاءات كاملة لأيام العمل والعطلات. التحكم الكامل في تحديد أيام العطلات أو الأيام المستثناة حسب الحاجة. وممكن التجربة من خلال الاكواد التالية '------------------------------------------------- ' اختبار حساب عدد أيام يوم محدد في فترة '------------------------------------------------- Public Sub TestCountSingleWeekday() Dim StartDate As Date Dim EndDate As Date Dim TargetDay As WeekDays Dim Count As Long ' مثال: من 1 مارس 2025 إلى 31 مارس 2025 StartDate = DateSerial(2025, 3, 1) EndDate = DateSerial(2025, 3, 31) ' اليوم المطلوب: الجمعة TargetDay = wdFriday ' حساب عدد الأيام Count = CountWeekday(StartDate, EndDate, TargetDay) ' طباعة النتيجة في النافذة الفورية Debug.Print "==============================" Debug.Print "اختبار CountWeekday:" Debug.Print "الفترة من: " & FormatDateValue(StartDate) Debug.Print "إلى: " & FormatDateValue(EndDate) Debug.Print "اليوم المطلوب: " & WeekdayName(TargetDay) Debug.Print "عدد الأيام: " & Count Debug.Print "==============================" End Sub '------------------------------------------------- ' اختبار حساب أكثر من يوم (مثلاً الجمعة والسبت) '------------------------------------------------- Public Sub TestCountMultipleWeekdays() Dim StartDate As Date Dim EndDate As Date Dim FridayCount As Long Dim SaturdayCount As Long ' مثال: من 1 أبريل 2025 إلى 30 أبريل 2025 StartDate = DateSerial(2025, 4, 1) EndDate = DateSerial(2025, 4, 30) ' حساب كل يوم على حدة FridayCount = CountWeekday(StartDate, EndDate, wdFriday) SaturdayCount = CountWeekday(StartDate, EndDate, wdSaturday) ' طباعة النتائج Debug.Print "==============================" Debug.Print "اختبار CountWeekday لعدة أيام:" Debug.Print "الفترة من: " & FormatDateValue(StartDate) Debug.Print "إلى: " & FormatDateValue(EndDate) Debug.Print "عدد أيام الجمعة: " & FridayCount Debug.Print "عدد أيام السبت: " & SaturdayCount Debug.Print "==============================" End Sub '------------------------------------------------- ' اختبار حساب كامل إحصاءات الشهر '------------------------------------------------- Public Sub TestCalculateMonthStats() Dim Stats As TMonthStats Dim StartDate As Date Dim EndDate As Date ' مثال: مارس 2025 كامل StartDate = DateSerial(2025, 3, 1) EndDate = DateSerial(2025, 3, 31) Stats = CalculateMonthStats(StartDate, EndDate, Month(StartDate), Year(StartDate)) ' طباعة النتائج Debug.Print "==============================" Debug.Print "اختبار CalculateMonthStats:" Debug.Print "الشهر: " & Stats.MonthName & " - " & Stats.CalendarYear Debug.Print "إجمالي الأيام: " & Stats.TotalDays Debug.Print "أيام الجمعة: " & Stats.FridayCount Debug.Print "أيام السبت: " & Stats.SaturdayCount Debug.Print "أيام العمل: " & Stats.WorkingDays Debug.Print "==============================" End Sub '================================================= ' دالة اختبار عدد أيام أي يوم من الأحد إلى الخميس '================================================= Public Sub TestCountWeekdaysOtherThanFriSat() Dim StartDate As Date Dim EndDate As Date Dim TargetDay As WeekDays Dim Count As Long ' مثال للفترة: من 1 مارس 2025 إلى 31 مارس 2025 StartDate = DateSerial(2025, 3, 1) EndDate = DateSerial(2025, 3, 31) Debug.Print "==============================" Debug.Print "اختبار CountWeekday للأيام غير الجمعة والسبت:" Debug.Print "الفترة من: " & FormatDateValue(StartDate) Debug.Print "إلى: " & FormatDateValue(EndDate) ' التجربة لجميع الأيام من الأحد إلى الخميس For TargetDay = wdSunday To wdThursday Count = CountWeekday(StartDate, EndDate, TargetDay) Debug.Print WeekdayName(TargetDay) & ": " & Count Next TargetDay Debug.Print "==============================" End Sub '================================================= ' دالة اختبار عدد أيام أي يوم من الأحد إلى الخميس (باستثناء الثلاثاء) '================================================= Public Sub TestCountWeekdaysExceptTuesday() Dim StartDate As Date Dim EndDate As Date Dim TargetDay As WeekDays Dim Count As Long ' الفترة الزمنية للاختبار StartDate = DateSerial(2025, 3, 1) EndDate = DateSerial(2025, 3, 31) Debug.Print "==============================" Debug.Print "اختبار CountWeekday للأيام الأحد-الإثنين-الأربعاء-الخميس (باستثناء الثلاثاء)" Debug.Print "الفترة من: " & FormatDateValue(StartDate) Debug.Print "إلى: " & FormatDateValue(EndDate) ' التجربة لجميع الأيام من الأحد إلى الخميس مع استثناء الثلاثاء For TargetDay = wdSunday To wdThursday If TargetDay <> wdTuesday Then Count = CountWeekday(StartDate, EndDate, TargetDay) Debug.Print WeekdayName(TargetDay) & ": " & Count End If Next TargetDay Debug.Print "==============================" End Sub اطيب الامانى3 points
-
أخواني وأساتذتي ومعلمينا ( دون استثناء ) الكل مر بحياته على هاي اللعبة البسيطة والجميلة ، إن كان في طفولته أو في شبابه .. واليوم جسدناها بطريقة فوكشية جديدة من خلال آكسيس ، وتحدي معوقاته بالتعامل مع الصور .. وبدون ما نتكلم في هذه النقطة - واللي رح أتركها لكم للتجربة - رح أشرحلكم اليوم اللعبة ببساطة للي ما بعرفها من قبل . تتكون اللعبة من مجموعة من الأوراق ، تتمثل في :- أوراق الأرقام : تحتوي اللعبة على أوراق الأرقام (9-0) ضمن ألوان مختلفة : الأحمر ، الأصفر ، الأزرق ، الأخضر . بطاقات الأوامر : تختلف هذه البطاقات في اللون والأمر الذي يترتب على استخدامها ، وهي كالآتي :- بطاقة تغيير الاتجاه : تُمكن اللاعب من تغيير سير اللعبة من اليسار إلى اليمين أو العكس . وإذا كانت اللعبة مكونة من لاعبين اثنين فقط ، يتم تخطي دور اللاعب الآخر ويعود الدور للّاعب الذي لعب البطاقة . بطاقة السحب +2 : وتمكن اللاعب من إجبار اللاعب التالي على سحب ورقتين من كومة الأوراق . ويتم تخطي دوره وينتقل الدور للّاعب الذي يليه . بطاقة تخطي الدور : تمكن اللاعب من منع اللاعب التالي من لعب دوره القادم وينتقل الدور للاعب الذي بعده . بطاقة السحب +4 : وتمكن اللاعب من اختيار اللون الذي سيلعبه اللاعب التالي ، وإجباره على سحب 4 أوراق من كومة الأوراق . ويتم تخطي دوره وينتقل الدور للّاعب الذي يليه . بالنسبة إلى توزيع الأوراق في الأونو ، يتم التوزيع بشكل عشوائي ، حيث يوزع 7 أوراق لكل لاعب ويضع باقي الأوراق بشكل مقلوب على يسار منطقة اللعب ، وتسمى ( كومة اللسحب ) . وييتم وضع آخر ورقة بشكل مكشوف في منتصف منطقة اللعب ، وهذا المكان يسمى ( النار ) ، وإذا كانت أوّل ورقة مكشوفة في النار هي بطاقة تغيير اللون أو بطاقة اسحب 4 ، هنا يجب إعادتها لكومة الأوراق وتسحب ورقة أخرى غيرها . طريقة اللعب :- يبدأ اللاعب باللعب في نسختنا ، وذلك برمي أي ورقة في النار ، على أن توافق هذه الورقة آخر ورقة في النار بأحد الشرطين :- - اللون نفسه من أي قيمة . - القيمة نفسها من أي لون . ينتقل الدّور بين اللاعبين باتجاه عقارب الساعة ، وإذا لم يمتلك أحد اللاعبين ورقة أو بطاقة مناسبة للّعب ، يجب عليه أن يسحب من كومة الأوراق . زر الأونو :- وهي كلمة يقولها اللاعب إذا تبقت في يده ورقة أو ورقتان ، وسيلعب إحداهما ويضعها في كومة النار ، هنا يجب أن يقول " أونو " لتحذير اللاعبين الآخرين قبل رمي ورقته ما قبل الأخيرة ، وإذا لم يُحذّر اللّاعب من امتلاكه بطاقة واحدة وانتبه عليه اللاعبون الآخرون سيُعاقب بسحب بطاقتين من كومة الأوراق وهذا ما أطلقنا عليه اسم تحدي الأونو 😁 . في نموذج البداية ، تم إضافة وتفعيل 3 خيارات للتحكم بخصائص اللعبة . بحيث لديك :- 1️⃣ السماح بالسحب التراكمي عند رمي ورقة السحب +2 . ماذا يعني هذا ؟ يعني لو اللاعب رمى ورقة +2 ، والكمبيوتر معه ورقة +2 ، فالكمبيوتر بقدر يرمي الورقة اللي معه بغض النظر عن لونها . وهيك بكون الدور عندك إنك تسحب 4 ورقات . إلا إذا كان معك ورقة +2 ثانية ، فبتقدر ترميها . وبرجع الدور للكمبيوتر يسحب 6 ورقات ..... وهيك بشكل تراكمي . 2️⃣ السماح بتبديل الأوراق عند رمي أي لاعب ورقة 0 أو ورقة 7 مهما كان لونها . فسيتم تبديل الأوراق التي بيدك لتصبح بيد الكمبيوتر والعكس طبعاً 😜 . 3️⃣ السحب من كومة الورق حتى يجد اللاعب ورقة صالحة للّعب . يعني بدل ما تسحب ورقة وحدة ، رح تضل تسحب حتى تلاقي ورقة ترميها للنار . 4️⃣ تحديد قيمة النتيجة التي يفوز اللاعب الذي يصل لها أولا . فعند فوز أي لاعب ، يأخذ مجموع القيم للأوراق التي في اللاعب الثاني . والإحتساب كما يلي لقيمة كل ورقة . طريقة حساب النقاط :- تحسب النقاط في لعبة أونو كما يأتي :- أوراق الأرقام = قيمة الورقة نفسها . بطاقة اسحب 2 = 20 نقطة . بطاقة تخطّي الدّور = 20 نقطة . بطاقة تغيير الاتّجاه = 20 نقطة . بطاقة تغيير اللّون = 50 نقطة . بطاقة اسحب 4 = 50 نقطة . صورة حية من اللعبة :- ملفات اللعبة للإصدارين ، 64 و 32 :- للإصدار 32 :- Uno Game - 32.zip للإصدار 64 :- Uno Game - 64.zip :- يجب أن يكون ملف اللعبة بجانب مجلد الصور حتى لا تواجه مشاكل في اللعب .3 points
-
3 points
-
برنامج مكتبي لتنظيم الملفات التي علي جهازك و إدارة اعمالك وتذكريرك بوقت العمل وهو مقتبس من عدة افكار واريد ان اساهم في هذا الموقع الذي له فضل عليه بعد الله في تعليمي وإتقاني لقواعد البيانات وايضا استعنت بالله ثم بالذكاء الصناعي لعمل هذا المشروع وهذا كنوع من رد الجميل لهذا الموقع الذي له فضل عليه بعد الله واملي ان يعجبكم مشروع تنظيم الاعمال والملفات.accdb3 points
-
ممكن وبكل سهولة هذا البرنامج يسهل عليك أدخال الدرجات والتاريخ كذلك الشرح يطول ولكن ثق تماما أنك بمجرد أن تفتحه وتثبت الماكرو وتستخدمه ستفهم البرنامج ثم بعد التجربة أذا أردت أي توضيح نحن في الخدمة محرر الأكواد مفتوح ويمكنك التعديل عليه كما تريد الطريقة : افتح ملفك الذي تريد الأدخال فيه ثم افتح هذا الملف ثم اضغط على إحدى الأيقونتين (الدرجات أو التاريخ) وعندما يفتح الفورم انتقل مباشرة إلى ملفك الذي تريد الأدخال فيه ستجد أن الفورم ينتقل إلى الملف الجديد تفضل إدخال الدرجات والتاريخ.xls3 points
-
2 points
-
2 points
-
وعليكم السلام ورحمة الله وبركاته الحل هو نقل الكود إلى موديول (Module) عادي وتخصيص زر لتشغيله فقط عندما تضيف أوراق عمل جديدة اليك التعديل بالمرفق المصنف2.xlsm2 points
-
2 points
-
لا والله مش ماكرة ولا حاجة بس ابتسمت لانى مش هأعرف اشارك للاسف المرة دى او ممكن اشارك بانى اطور اى افكار قديمة لو سمح وقتى لذلك2 points
-
ابتسامة ماكرة ... المهم مركز الصدارة لا ينتزع2 points
-
تمهيداً للتحدي الثاني ، وللإنتقال إلى مرحلة أكبر عن المستوى الأول . وإنطلاقاً من باب المشاركة للجميع . سنتجه للأخذ بترشيحكم لموضوع من بين 3 مواضيع ، ليتم طرحه كسؤال التحدي الثاني . 1️⃣ إنشاء مؤقتة الصلوات .. 2️⃣ إنشاء نظام تسجيل دخول احترافي برمجياً ، مع نظام صلاحيات متعدد المستويات .. 3️⃣ إنشاء نظام قارئ للنصوص متعدد الخصائص ..2 points
-
جرب التعديل التالي لا ننس كتابة اسم الملف في الحلية A2 الكل (1) (2).xlsm لا حرج ان اردت اي تعديل احر2 points
-
السلام عليكم ورحمة الله وبركاته كان من الافضل ارفاق ملف للتطبيق عليه جرب الملف المرفق ببيانات افتراضية في النطاق A2:A100 ومعادلة الجمع في الخلية D2 ,DL ويمكنك نسحها الى اي خلية اخرى =IFERROR(SUMPRODUCT((A2:A100>0)*(SUBTOTAL(103;OFFSET(A2;ROW(A2:A100)-MIN(ROW(A2:A100));0)))*(A2:A100));0) جمع الأرقام الموجبة فقط الظاهرة دون المخفية.xlsx2 points
-
2 points
-
2 points
-
2 points
-
2 points
-
بعد إذن الاخ @kkhalifa1960 من خاصية (التنسيق أو Format) لمربع النص قم بإزالة علامتي النجمة إفتح الجدول في عرض التصميم ومن خاصية (قناع الإدخال أو Input Mask) للحقل قم بكتابة Password ثم طبق نفس التعديل في مربع النص في النموذج أما إذا أردت أن يظل ظاهراً في الجدول وتريد إخفاؤه في النموذج فقط فطبق التعديل في مربع النص فقط تحياتي2 points
-
اعرض الملف أداة إنشاء كائن الشجرة Treeview المخصصة {سلسلة الأدوات المساعدة المخصصة} كما يعلم الجميع فإن مايكروسوفت بصدد التوقف عن إستخدام كائنات ActiveX في تطبيقات أكسس وهذا يعني أنه لن يعود بالإمكان إستخدام بعض الكائنات ومنها كائن Treeview لذا ومن هذا المنطلق أقدم لكم هذه المحاولة المتواضعة لأداة تحاكي كائن Treeview ولكن مع إضافة ميزتين إضافيتين غير موجودة في الكائن القياسي وسنتعرف عليهما من خلال المثال التوضيحي الحقيقة أني قررت رفع الأداة بوضعها الحالي وأنا أعلم أنه مازال بالإمكان أفضل مما كان ولكني وجدت أنها بالوضع الحالي تؤدي الغرض منها بالإضافة إلى أنها ستكون أساس جيد لأي شخص يريد البناء عليها وتطويرها لذلك حبيت أهديها لكم في هذه الأيام المباركة لعلي أنال دعوة في ظهر الغيب. هذه الأداة تختلف عن كل ما سبق أن رفعته ضمن سلسلة الأدوات المساعدة فهي لا تعتمد على قالب واحد بل تختلف بإختلاف الغرض منها فمثلا شجرة الحسابات تختلف عن شجرة الهيكل التنظيمي وكلاهما يختلفان عن شجرة العائلة فكل شجرة تحتاج لحقول تختلف عن الأخرى لذلك فهذه الأداة تقدم الحد الأدنى المطلوب لعمل أي شجرة ويبقى على المطور إضافة الحقول التي يريد إضافتها وهذا يعني أنه للإستفادة من الأداة في تطبيقاتكم سيتطلب منكم الأمر إلى بعض التركيز والعمل . لا تشيلو هم فكل شيئ موضح ضمن الملف المرفق بإسم (النسخة التدريبية) وكما أقول وأشدد دائماً أرجو الإطلاع على المرفقات وقراءة التعليمات وتطبيق ماجاء فيها بعناية لإتقان العمل بها . تحديثاً للموضوع تم إضافة أداة جديدة في هذا الموضوع تعتمد على هذه الأداة في عملها ويتم فيها الحصول على وظائف إضافية على النحو التالي - إظهار أيقونة تميز عناصر المستوى الأول عن بقية المستويات - تبديل أيقونتي الجمع والطرح بأشكال أخرى (لمن يحبون التغيير) - طريقة تحويل إتجاه الشجرة من اليسار إلى اليمين لمن يستخدمون اللغة الإنجليزية في تطبيقاتهم وهذا يعني أنه يمكننا القيام بنفس التعديلات على الأداة في الموضوع السابق للحصول على نفس النتائج هنا تحياتي صاحب الملف منتصر الانسي تمت الاضافه 02/28/26 الاقسام قسم الأكسيس2 points
-
السلام عليكم ورحمة الله وبركاته اعتقد ان المشكلة في تنسيق الخلايا حيث التنسيق الحالي _-* #,##0.00 _€_-;-* #,##0.00 _€_-;_-* "-"?? _€_-;_-@_- _-* "-"?? _€_- هذا الجزء يخبر إكسل أن يعرض علامة "-" بدلًا من الصفر. اجعل تنسيق الخلايا لكل النطاق c6:k76 _* #,##0.00 _€_-;_* #,##0.00 _€_-;_;;_-@_- حيث ;; يجعل الخلية فارغة طبقت التعديل على بعض الصفحات التي تم الغاء الحماية عنها كتجربة ورقة الإستهلاك اليومي جانفي100% 2026.xls ارجو ان يكون في ردي بعض الافادة2 points
-
وعليكم السلام ورحمة الله وبركاته هذا الطلب غير موجود في عنوان مشاركتم الاساسية ولا في شرح طلبكم وبالنسبة لهذا الطلب اردت تقديم ما يفيد ولكن حسب ملقكم و حسب طلبكم الاحير ومن الملاحظات:- خلية "الاسم" و"مكان العمل" غير مرتبطة بقوائم الأسماء أو البيانات في الصفحات الأخرى، والاسم المكتوب غير موجود أصلاً في السجلات؛ دمج آلاف الخلايا من V إلى XFC (أكثر من 16,000 خلية) لعمل قائمة منسدلة هو إجراء غير صحيح، في حين أن خلية واحدة تكفي تماماً فاذا كان طلبكم الاساسي وهو ادراج كود معاينة قد تحقق في الرد السابق عليه قم بادراج موضوع جديد به طلب واضح مقرون بملف مستوف للبيانات ومنظم تقنياً ومحدداً في أهدافه إلغاء الدمج ، واستخدام خلية واحدة فقط (مثلاً V6) وتوسيع حجمها ظاهرياً فقط إذا لزم الأمر واربطها بمصدر البيانات الفعلية والاسماء الحقيقية الموجودة بالملف ولا احفيك سرا ان اي ملف عشوائي في التنسيق وغير مستوف البيانات لا يشجع أحداً على العمل عليه قم بذلك والجميع سيقدم المساعدة والحلول المناسبة تقبل الله صيامكم2 points
-
وعليكم السلام ورحمة الله وبركاته اليك الملف وبه كود المعاينة ملف الحجز.xlsb2 points
-
إصلاح مشكلة الإرسال على دفعات ، حسب الوقت الذي يقرره المستخدم من خانتي . ضبط مشكلة Yahoo عند استلامه بريد من Gmail ، والسبب طبعاً في هذه المشكلة هو سيرفر الـ Yahoo نفسه لما يفرضه من قيود أمان . وحيث أنه يمكن للمستخدم اعتبار الإيميل Not Spam عند استلامه بريد من Gmail . إتاحة الإرسال من Outlook كما فعلنا في Gmail . حيث على المستخدم فقط تشغيل تطبيق الـ Outlook وتفعيل بريده مرة واحدة فقط لا غير . وبعدها لن نحتاج للتطبيق أبداً أو حتى فتح التطبيق بالخلفية أو بأي شكل من الأشكل . السبب في هذا هو عدم فرض قيود مايكروسوفت على المستخدم نهائياً . تحسين ردود الرسائل في الجدول Tbl_SentLog ، بحيث تكون أوضح للمستخدم عن سبب الخلل عند فشل الإرسال ، كي يتم التعامل مع الخلل بشكل مباشر . تحسين وإصلاح بعض النقاط الصغيرة . EmailSender V.2.0.accdb.zip2 points
-
2 points
-
2 points
-
مميزات التحديث الجديد :- واجهة رسومية متطورة وجميلة وتحاكي الحداثة والتطور . إنشاء ديناميكي للجداول ، بحيث ما عليك سوى نقل النموذج والمديول فقط . إمكانية اختيار أكثر من بريد إلكتروني مستلم ، أو حتى بريد واحد بحيث تم دعم الإرسال المنفرد والجماعي كحزمة . وهنا الجدير بالذكر لتجربة النموذج المنبثق الغير موجود . دعم للمرفقات بكامل الأنواع . دعم الأرسال كنسخة مكربنة أو نسخة مخفية ( Cc , Bcc ) . لتلافي مشاكل الحظر الناتجة عن الأرسال الكبير بالدفعات ، تم إضافة فكرة مؤقت الانتظار بالثواني لكل عدد إيميلات تحدده من الواجهة . إمهال المستخدم مدة 5 ثواني لتأكيد عملية الإرسال . والهدف منها في حال الرغبة بعدم الإرسال لتصحيح أو تعديل قبل الأرسال . دعم رسائل الخطأ بالتوضيح الصريح لكل خطأ داخل جدول الأرشفة الذي يقوم بتخزين جميع الإرسالات التي تمت . تم إضافة نموذج لإدخال الإعدادات المستخدمة في الخدمة . .. والعديد من الميزات التي ستكتشفونها بأنفسكم .. دعم الواجهة بالكامل باللغة العربية . وللتذكير بآلية ضبط الإعدادات في الجدول :- كيف نحصل على SMTPPassword المقدم من Gmail ؟ إليك الطريقة خطوة بخطوة ببساطة . في متصفحك ، ادخل إلى ( إعدادات حساب Google ) . تحقق أولاً وقبل كل شيء من تفعيل ميزة ( التحقق بخطوتين ) أو ( 2-Step Verification ) في حسابك . ابحث في خانة البحث عن ( كلمة مرور التطبيق ) أو ( كلمات مرور التطبيقات )، او ( App Password ) ، حسب لغة الموقع لديك . ادخل كلمة المرور الخاصة بالإيميل الذي تريد استخدامه كإيميل مرسل . في خانة ( اسم التطبيق ) أو ( App Name ) ، أدخل اسم للتطبيق ، مثلاً ( SenderMailer ) . ثم انقر زر ( إنشاء أو Creat ) . الآن سيزودك الموقع بكلمة من 16 حرف ، انسخها والصقها في الحقل SMTPPassword . في المشروع ، سيتم انشاء إستعلام بإسم Qur_Foksh تلقائي . كل ما عليك فعله هو إضافة الأسماء والإيميلات الى الجدول Tbl_Emails ، ثم في الاستعلام إضافة حقل الإسم أولاً ثم حقل الايميل ثانياً ، كي يظهر معكم الإيميلات التي تم تسجيلها في النظام للإرسال داخل النموذج أو في نفس الاستعلام اختر الجدول الذي يحتوي الأيميلات ، وقم بإضافة حقلي الإسم والإيميل فقط :- الملف المرفق مفتوح المصدر .. EmailSender 2026.zip2 points
-
سألت الذكاء فأعطاني عدة حلول الغريب ان ذكر الصندوق ولكن لم يقل انه اسود سؤالي : هل يمكن حماية محرر فيجوال في اكسس وهو على صيغة accdb بدون استخدام كلمة المرور المعتادة داخل المحرر ودون استخدام قفل مفتاح اشيفت .. هل من طريقة مبتكرة فريدة او جديدة قال Gemini نعم، هناك طرق "خارج الصندوق" تتجاوز الحماية التقليدية بكلمة مرور (VBA Project Password) التي يسهل كسرها حالياً، أو تعطيل مفتاح Shift الذي يمكن تجاوزه بسهولة. إليك مجموعة من الأساليب المبتكرة والاحترافية لحماية كود VBA في ملفات accdb: 1. تحويل الملف إلى صيغة ACCDE (الخيار الأقوى والأكثر شيوعاً) هذه ليست مجرد كلمة مرور، بل هي عملية "تجميع" (Compilation) للكود. كيف تعمل: يقوم اكسس بحذف الكود المصدري (Source Code) تماماً والإبقاء فقط على نسخة تنفيذية يفهمها الجهاز. النتيجة: لن يتمكن أي شخص من فتح محر VBA أو رؤية سطر واحد من الكود، حتى لو حاول ذلك. ملاحظة: احتفظ دائماً بنسخة accdb الأصلية للتعديل، لأنك لن تستطيع استرجاع الكود من ملف accde. 2. التمويه وتشتيت المنطق (Code Obfuscation) إذا كان لا بد من بقاء الملف بصيغة accdb، يمكنك استخدام استراتيجية "الغموض" بدلاً من "القفل": تغيير الأسماء: استبدل أسماء المتغيرات والدوال الواضحة بأسماء عشوائية لا معنى لها (مثلاً: بدلاً من CalculateSalary استخدم x7_v2). استدعاءات غير مباشرة: استخدم Application.Run لاستدعاء الدوال بدلاً من استدعائها مباشرة، مما يجعل تتبع مسار الكود كابوساً للمتطفل. 3. نقل الكود إلى مكتبة خارجية (DLL) باستخدام VB6 أو .NET هذه الطريقة تعتبر "مستوى المحترفين" وتجعل الوصول للكود مستحيلاً تقريباً من داخل اكسس: الفكرة: بدلاً من كتابة الكود الحساس داخل اكسس، قم بكتابته في لغة برمجة أخرى (مثل C# أو VB.NET) وقم بتصديره كملف DLL. التطبيق: داخل اكسس، تقوم فقط بعمل "استدعاء" للدالة الموجودة في الملف الخارجي. الميزة: الكود لا يوجد أصلاً داخل قاعدة البيانات ليتم فتحه أو كسره. 4. طريقة "فخ التحقق" (Conditional Execution) يمكنك وضع كود في بداية تشغيل البرنامج يتحقق من "بصمة" معينة للجهاز (مثل الرقم التسلسلي للهاردسك)، وإذا لم يتطابق، يقوم الكود بمسح نفسه أو إغلاق التطبيق فوراً. مثال: > "إذا فتح المستخدم محرر VBA وحاول التعديل، يتم تفعيل ماكرو مخفي يقوم بحذف سجلات أساسية أو تعطيل الواجهات." (هذه الطريقة دفاعية وليست وقائية). 5. استخدام Add-ins الخارجية للتشفير هناك أدوات متقدمة (مثل VBA Code Guard) تقوم بتغيير بنية الكود داخل الملف بطريقة تجعل قراءته مستحيلة بشرياً حتى لو تم فتح المحرر، حيث تظهر الرموز كطلاسم غير مفهومة. أي الطرق تفضل؟ إذا كنت تبحث عن الأمان المطلق وسهولة التنفيذ، فإن تحويل الملف إلى ACCDE هو الحل الأمثل. أما إذا كنت ترغب في حماية برمجية معقدة تسمح لك بإدارة التراخيص، فنقل الكود إلى DLL هو الطريق الصحيح. هل تود أن أشرح لك كيفية تحويل ملفك إلى ACCDE أو كيفية ربط مكتبة DLL بملف اكسس؟1 point
-
ههههههه انا قطعت لك نصف الطريق ، واعتقدت أنك قادر على انشاء استعلام حذف بشرط قيمة المسلسل الحالية . لكن قام الأستاذ خليفة بطرح الفكرة بنكهته الخاصة .1 point
-
تمام وفقت ووفيت وكفيت وبعد اذنك انا حبيت ان اضع الشرح بالتفصيل الممل بعدكم واللى كنت عارفه بس ما حبيت اسبقكم اولا لازم نفهم ايه السحر اللى هنا ونفك الطلاسم دى ازاى علشان نفهم اللى بيحصل اولا انا عملت : Documenter للجدول ده وهو اللى كان فى اول مشاركة علشان بس اعرف هل فى اى حيل مخفية يعنى اختصارا للوقت والجهد وده اللى وضح كل شئ وهو كالاتى : تم تعريف الـ RowSource في الحقل على مستوى الـ ACE/Jet Engine مباشرة تم تغيير DisplayControl إلى Text Box تغيير DisplayControl أخفى القيم من واجهة Lookup Tab أى ان القيم لن تظهر فى وضع التصميم ولكنها ظلت محفوظة في مخطط الجدول ( schema ) طيب عرفنا البيانات وعرفنا فين محفوظة والحمد لله نوضح نقطة مهمة الاول قبل ما ننتقل للاضافة والحذف خاصية الإرث (inheritance) فى خصائص مربع التحرير والسرد يجب ان تكون مفعلة والا لن تظهر القائمة فى وقت العرض Runtime طيب الاضافة بطريقة الاستاذ منتصر او الافضل من خلال كود زى ده اولا الدوال الرئيسية لاضافة او تحديث او ازالة الخصائص Private Sub AddOrUpdateProperty(fld As DAO.Field, _ propName As String, _ propType As Integer, _ propValue As Variant) On Error GoTo ErrHandler fld.Properties(propName) = propValue GoTo ExitProc ErrHandler: If Err.Number = 3270 Then Err.Clear On Error GoTo ErrCreate Dim prp As DAO.Property Set prp = fld.CreateProperty(propName, propType, propValue) fld.Properties.Append prp GoTo ExitProc End If MsgBox "خطأ في AddOrUpdateProperty:" & vbCrLf & Err.Description, vbCritical ErrCreate: MsgBox "فشل إنشاء الخاصية " & propName & ":" & vbCrLf & Err.Description, vbCritical ExitProc: Set prp = Nothing End Sub Private Sub DeletePropIfExists(fld As DAO.Field, propName As String) On Error GoTo ErrHandler Dim prp As DAO.Property For Each prp In fld.Properties If prp.Name = propName Then fld.Properties.Delete propName GoTo ExitProc End If Next prp GoTo ExitProc ErrHandler: MsgBox "فشل حذف " & propName & ":" & vbCrLf & Err.Description, vbCritical ExitProc: Set prp = Nothing End Sub ثانيا : دوال الاضافة والحذف Public Sub AddHiddenFieldProperties() On Error GoTo ErrHandler Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb Set tdf = db.TableDefs("TableName") Set fld = tdf.Fields("FieldName") ' DisplayControl = 109 (Combo مخفي) / 110 (Combo ظاهر) fld.Properties("DisplayControl") = 109 AddOrUpdateProperty fld, "RowSourceType", dbText, "Value List" AddOrUpdateProperty fld, "RowSource", dbText, _ """آسيا"";""أفريقيا"";""أوروبا"";""أمريكا الشمالية"";""أمريكا الجنوبية""" db.TableDefs.Refresh MsgBox "تم إضافة قائمة القيم المخفية بنجاح!", vbInformation GoTo ExitProc ErrHandler: MsgBox "فشلت العملية: " & Err.Description, vbCritical ExitProc: Set fld = Nothing Set tdf = Nothing Set db = Nothing End Sub Public Sub DeleteFieldProperties() On Error GoTo ErrHandler Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb Set tdf = db.TableDefs("TableName") Set fld = tdf.Fields("FieldName") DeletePropIfExists fld, "RowSource" DeletePropIfExists fld, "RowSourceType" db.TableDefs.Refresh MsgBox "تم الحذف بنجاح!", vbInformation GoTo ExitProc ErrHandler: MsgBox "فشل الحذف: " & Err.Description, vbCritical ExitProc: Set fld = Nothing Set tdf = Nothing Set db = Nothing End Sub وبكده نقدر نقول التالى فى الاجابة ببساطة 1. كيف تم إضافة عناصر القائمة؟ من احد الطرق السابقة اما بطريقة الاستاذ : منتصر الانسي أو من خلال الاكواد السابقة 2- كيف يمكن حذف تلك العناصر؟ اما بطريقة الاستاذ : منتصر الانسي أو من خلال الاكواد السابقة 3- أين يتم حفظ القائمة؟ فى الجدول في خصائص الحقل على مستوى الـ ACE/Jet Engine مباشرة و تم تغيير DisplayControl إلى Text Box لتظل محفوظة في مخطط الجدول ( schema )1 point
-
الحقيقة أن جميع إجابات الأساتذة صحيحة ولكنها لا تبين لمن هم زي حالاتي على باب الله 😅 طريقة التنفيذ عموما وببساطة وإجابة على سؤال الأخ @Debug Ace رغم أنك كنت قد أجبتها بهذه الإجابة ولكني سأوضح الطريقة ليستوعبها بقية الأعضاء السؤال الأول كيفية إضافة العناصر؟ التلميح هنا هو بتغيير الخاصية (Allow Value List Edits أو السماح بتحرير قائمة القيم) الخاصة بمربع التحرير والسرد إلى (Yes أو نعم) لتظهر بهذا الشكل لتظهر لنا القائمة الواردة في مشاركة الأخ @kanory ومن خلال هذه القائمة يمكننا إضافة أو حذف العناصر السؤال الثاني طريقة حذف العناصر؟ كما ذكرت في الجملة الأخيرة وذكر الأخ @Debug Ace في إجابته فيمكننا حذف العناصر من خلال النافذة الأخيرة السؤال الثالث أين يتم الإحتفاظ بالبيانات؟ كما ذكر الأخ @Debug Ace هي بالفعل في الجدول ولكن أين بالضبط وهذا ما سأوضحه هنا إن شاء الله يجب أن نضع في إعتبارنا أن عدم ظهور خاصية ضمن نافذة الخصائص لا يعني أنها غير موجودة فمثلاً لو قارنا بين نافذتي الخصائص لحقل Field1 عندما يكون مربع نص أو عندما يكون مربع تحرير وسرد هذا معناه أن خاصية (Row Source أو مصدر الصف) هي خاصية من خواص الحقل سواء ظهرت أم لم تظهر في نافذة الخصائص وحتى نتأكد قم بنسخ السطر التالي ولصقه في النافذة الفورية ثم اضغط زر Enter ?CurrentDb.TableDefs("Table1").Fields("Field1").Properties("RowSource").Value لتظهر لنا النتيجة التالية وهذا معناه أنه يتم الإحتفاظ بعناصر القائمة في خاصية (Row Source أو مصدر الصف) الخاصة بالحقل إن شاء الله أكون قد وفقت بالشرح تحياتي1 point
-
1 point
-
وعليكم السلام ورحمة الله وبركاته . ارى الحل في الغاء جميع معادلات الصفيف واالابقاء على الاسماء في النطاق AA16:AA وبدل المعادلات كود في حدث الورقة ملاحظة هامة اذا اردت نقل الكود الى ملف اخر به الكمبوبكس1 يجب اجراء بعض التعديلات على اعدادات الكمبوبكس1 افتح الكمبوبكس في وضع التصميم ثم خصائص تم امسخ البيانات في الدائرة الحمراء كما في الصورة كذلك قم بمسخ المعادلات تقبل الله صيامكم وطاعاتكم حل مشكل القائمة المنسدلةباستخدام ComboBox1.xlsm1 point
-
1. كيف تم إضافة عناصر القائمة؟ بنفس الطريقة اللى انا عملت بيها قاعدة وجدول وحقل و نموذج ومربع سرد و كله جديد X جديد واضفت البيانات 2- كيف يمكن حذف تلك العناصر؟ زى ما اضفنا البيانات نخذفها 3- أين يتم حفظ القائمة؟ فى الجدول1 point
-
ههههههههههههههههههههه طيب نتناقش بعد ما تشوفوا ده C:\Users\000000\Desktop\لغز.accdb Thursday, March 12, 2026 Table: Table1 Page: 1 Properties AlternateBackShade: 95 AlternateBackThemeC 1 AlternateBackTint: 100 BackShade: 100 BackTint: 100 DatasheetForeTheme 0 DatasheetGridlinesThe 3 DateCreated: 3/12/2026 2:41:20 AM DefaultView: 2 DisplayViewsOnShare 1 FilterOnLoad: False GUID: {انا حذفته HideNewField: False LastUpdated: 3/12/2026 2:43:11 AM NameMap: Long binary data OrderByOn: False OrderByOnLoad: True Orientation: Left-to-Right PublishToWeb: 1 ReadOnlyWhenDiscon False RecordCount: 1 ThemeFontIndex: 1 TotalsRow: False Updatable: True Columns Name Type Size ID Long Integer 4 AggregateType: -1 AllowZeroLength: False AppendOnly: False Attributes: Fixed Size, Auto-Increment CollatingOrder: General ColumnHidden: False ColumnOrder: Default ColumnWidth: Default CurrencyLCID: 0 DataUpdatable: False GUID: {انا حذفته} OrdinalPosition: 0 Precision: 1033 Required: False ResultType: 0 Scale: 0 SourceField: ID SourceTable: Table1 TextAlign: General Field1 Short Text 255 AggregateType: -1 AllowZeroLength: True AppendOnly: False Attributes: Variable Length CollatingOrder: General ColumnHidden: False ColumnOrder: Default ColumnWidth: Default CurrencyLCID: 0 DataUpdatable: False DisplayControl: Text Box GUID: {انا حذفته} C:\Users\00000\Desktop\لغز.accdb Thursday, March 12, 2026 Table: Table1 Page: 2 IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Precision: 1033 Required: False ResultType: 0 RowSource: "آسيا";"أفريقيا";"أوروبا";"أمريكا الشمالية";"أمريكا الجنوبية";" Scale: 0 SourceField: Field1 SourceTable: Table1 TextAlign: General UnicodeCompression: True Table Indexes Name Number of Fields PrimaryKey 1 Clustered: False DistinctCount: 1 Foreign: False IgnoreNulls: False Name: PrimaryKey Primary: True Required: True Unique: True Fields: ID Ascending User Permissions admin Delete, Read Permissions, Set Permissions, Change Owner, Read Definition, Write Definition, Read Data, Insert Data, Update Group Permissions Admins Delete, Read Permissions, Set Permissions, Change Owner, Read Definition, Write Definition, Read Data, Insert Data, Update Users Delete, Read Permissions, Set Permissions, Change Owner, Read Definition, Write Definition, Read Data, Insert Data, Update1 point
-
أكرمك الله وزادك الله من فضله بالفعل انجاز عظيم جعله الله فى ميزان حسناتك1 point
-
ماشاء الله زادك الله علماً ورفع الله قدرك ورزقك الله الفردوس الأعلى من الجنة1 point
-
ريح نفسك مالهاش حل... طريقك مسدود مسدود مسدود يا ولدى Access لا يدعم DoubleBuffering1 point
-
1 point
-
اعذرني عن الشرح لانك طلبت المرفق فقط: الفكرة اننا نستخدم لل DOB: Validation Rule: DateDiff("yyyy";[DOB];Date())>=18 Validation Text: لا يمكن تسجيل موظف عمره أقل من 18 سنة. بالنسبة الى HireDate: [HireDate]>=#01/01/2020# And [HireDate]<=Date()Validation Rule: Validation Text: تاريخ التعيين يجب أن يكون بعد 1/1/2020 وليس في المستقبل. وهكذا بالنسبة الى JobGrade اما بالنسبة الى BasicSalary فالامر مختلف نضع: VR = ([JobGrade]="A" And [BasicSalary]<=10000) Or ([JobGrade]="B" And [BasicSalary]<=7000) Or ([JobGrade]="C" And [BasicSalary]<=5000) =VT الراتب غير مطابق للدرجة الوظيفية. A = 10000 B = 7000 C = 5000 ليس في حقل BasicSalary وانما من خلال Table Properties من خلال أي حقل فارغ والضغط على property sheet التعامل مع الجداول وخصائصها .rar1 point
-
تفضل استاذ @فؤاد الدلوي مرفقك حسب مافهمت . اولا الجزء المهم جدا إعداد (CaptureOnTouch V5 Pro) افتح البرنامج الآن 👇 1️⃣ ادخل إلى: 🔹 Job Mode 2️⃣ أنشئ Job جديد اضغط: New 3️⃣ اختر نوع الإخراج اختر: Save to Folder اضغط Next 4️⃣ اختر المجلد اضغط Browse واختر: D:\Archive\Temp اضغط OK 5️⃣ أهم خطوة (اسم الملف) ستجد خيار: File Name Settings اختر: Custom واكتب اسم ثابت: scan ⚠️ بدون أرقام ⚠️ بدون تاريخ ⚠️ بدون Auto numbering ثم اختر: File Format = PDF مهم جداً داخل برنامج CaptureOnTouch V5 Pro تأكد أن: الحفظ في: · D:\Archive\Temp اسم الملف دائماً: · scan.pdf لا يوجد تاريخ أو ترقيم مضاف للاسم ثانياً اليك المرفق ' مسار برنامج CaptureOnTouch (تأكد منه عندك) AppPath = """C:\Program Files\Canon Electronics\CaptureOnTouch V5 Pro\TouchDR.exe""" او عدل كما لديك . الناتج D:\Archive\2026\02\1258.pdf ووافني بالرد . Fouad_ElDolwi.rar1 point
-
عمل رائع أخي @Foksh والحقيقة أنها المرة الأولى التي ينجح مع إرسال الإيميل بهذه السهولة لدي ملاحظتين الأولى غير مهمة وهي أن Yahoo يتعرف على الأيميل الصادر من التطبيق بأنه بريد إحتيالي ولا أدري إذا كان بالإمكان حل المشكلة اما الملاحظة الثانية أنه يجب تعديل السطر التالي db.CreateQueryDef "Qur_Foksh", "SELECT * FROM Tbl_Emails" إلى هذا السطر db.CreateQueryDef "Qur_Foksh", "SELECT NameOfComp,EmailOfComp FROM Tbl_Emails" لأن نتيجة السطر الأول ينتج عنه أن أول عمود في الاستعلام سيكون حقل الترقيم التلقائي والثاني سيكون الإسم مع أن طريقة العمل تتم بأخذ قيمة العمود الثاني في مربع القائمة كمصدر للأيميلات مما يسبب خطأ وعدم نجاح إرسال أي رسالة تحياتي1 point
-
وعليكم السلام-يمكنك استخدام هذه المعادلة وشكراً =IF(COUNTIF($D$2:D2,D2)=1,"أول فاتورة","") تكرار الشراء1.xlsx1 point