بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|
نجوم المشاركات
Popular Content
Showing content with the highest reputation on 06/11/22 in all areas
-
حياك الله اخي واستاذي ابو البشر والشكر لله اخي وجودكم انتم واخوننا الكرام هو الدافع لعودتنا بعد طول انقطاع من المؤكد ان الموقع يزخر بالامثلة للترقيم في الاستعلام مع ذلك ساتحدث عن طريقتين ربما تفيد احد من رواد الموقع الطريقة الاولى اذا كان لدينا في الجدول حقل ترقيم ولكن توجد ارقام محذوفة Expr1: DCount("[id]";"tbl_1";"[id]<=" & [id]) الطريقة الثانية اذا كان الجدول لا يحتوي اي حقل ترقيم وانما حقول نصية فقط ⬇️ Expr2: (Select Count(1) FROM [tbl_1] A WHERE A.item <=[tbl_1].[item]) item حقل نصي هنا ☝️من الافضل استخدام تسمية توضيحية حتى لا تظهر لنا رسالة بطلب قيمة معلمة . توجد طرق اخرى عديدة بعضها يعتمد على وحدة نمطية وبعضها بدون ولكن هذه من اسهل الطرق. والى لقاء في موضوع اخر باذن الله تحياتي3 points
-
شكرا لك أخي مبرمج سابق مبدع بالفطرة ..🙂 أرى أنك أعتمدت على فرضية أن الحقل Id موجود ومرتب تصاعديا بدون وجود نواقص (حقول محذوفة) .. ماذا لو أن حقل ال Id مكتوب هكذا xml0620220856 ؟ كيف نستطيع الحصول على ال 100 سجل الأولى ؟ ثم المائة التالية ؟ ولو كان لدينا 3 قوائم ListBox مثلا في نفس النموذج نريد فيها تقسيم السجلات إلى 3 أقسام متساوية .. كيف نفعل ذلك ؟؟ طبعا الهدف من السؤال هو تحريك الدماغ .. والاستفادة من خبراتكم .. وإثارة روح التحدي .. 👍🏼😁3 points
-
السلام عليكم ، أعضاء الموقع الكرام تم عمل التعديل التالي فى صلاحيات الزوار غير المسجلين بالموقع ، لذا وجب لاتنويه. منذ افتتاح الموقع فى 2003 و خاصية تنزيل المفات من المنتدى مقصورة على الأعضاء المسجلين فقط ، بينما يمكن للزوار تصفح مختلف الأقسام العامة بالموقع. الآن تم كسر هذه القاعدة ، و اتاحة تحميل الملفات لاي زائر و ان كان غير مسجل بالموقع مازال الزوار لا يستطيعون المشاركة الا بعد التسجيل بالموقع، و لكن الان يمكنهم التصفح للأقسام العامة وأن يقوموا بتنزيل الملفات دون تسجيل2 points
-
اعتذر لم اقم بتحميل المرفق ولكن اعتقد انه ملىء بالصوور والايكونات لخلفيات الفورم والأزرار وهكذا. الصور تكبر حجم قاعدة البيانات حتي ولو لم يوجد بها سجلات كما تفضلت عند استخدام صور لخلفيات الفورم او الأزرار او... يفضل ان تجعل هذه الصور غير مضمنة وتجعلها مرتبطة وتجعل لها فولدر خاص ترفقه ببرنامجك اينما ذهب لتستدعي منه الصور وتعرضها كيفما شئت لتوضيح هذا الكلام النظري انظر الي الصور التالية: طبعا التغير لكل العناصر التي تحتوي علي صور لديك تمنياتي بالتوفيق2 points
-
قمت بالفعل بجعل الاخطاء تظهر بعمود مستقل وجعلت للخطأ كود مستقل وهو 5 وما ظننت ان هذا الأمر مازال مطروحا حتي الآن - قمت ببعض التعديلات الطفيفة علي الكود بمرفقي السابق واظن ان هذا هو مطلبك نصيحة صغيرة - والتناصح حق بين المسلمين - وارجو ان لا يزعجك هذا - حاول اخي ان تعبث بالكود الذي يقدم اليك بحل موضوعاتك وتنظر ان حذفنا هذه الجملة ماذا سيحدث او غيرنا هنا بهذه الكلمة ماذا سيحدث وقم بالبحث عن الكلمة التي تظن انك لا تعرفها - او اطرح سؤالا عنها هنا مثلا - هكذا تعلمت عن نفسي بعض الأشياء - علي قلة ما لدي بتحليل الكود ومحاولة تقسيمه وفهم جزئياته سيفتح عليك الكثير من المعرفة والاستنتاجات وفهم منطقية عمل الكود الكثير والكثير بإذن الله وأخيرا - اعتذر علي الاطالة وارجو ان لا يزعجك كلامي وحتي لا يكون ردي مجرد كلام فقط اليك هذا المرفق ارجو ان يوافي طلبك جلب البيانات من الرقم القمي ابو جودي.rar2 points
-
يا اخي صرت احب موضوعاتك لانها تتحدث من مبدأ التفكير خارج الصندوق ولا تخلو من الطرفة ... زادك الله علما وشكرلك ...2 points
-
الطريقة الاسهل بدون تحريك دماغ ( هذا على افتراض وجوده) 😄 نجعل المصدر استعلام ونظيف له حقل ترقيم تلقائي ونكمل بنفس الطريقة2 points
-
اما انا سوف اعملها بطريقة الطيبين بدون الحاجة الى عدة استعلام فقط استعلام واحد ويكون مصدر للنموذج ويتم كتابة جملة الاستعلام في مربع نص مخفي في النموذج في البداية نحتاج الى نموذج فارغ ونضع فية ثلاث حقول نصية وزري امر ونموذج فرعي لعرض السجلات مصدر سجلات النموذج الفرعي الجدول ولايهمنا كثير لكوننا سوف نتحكم بالمصدر عن طريق الكود مربع النص الاول اسميته tx2 وقيمته الافتراضية 1والثاني tx3 وقيمته الافتراضية 100 والثالث tx10 تسمية الحقول امر راجع لك المهم تسمية الحقل تكون نفسها في الكود الحقل النصي tx10 قيمته تساوي ="SELECT tbl_1.id, tbl_1.id_item FROM tbl_1 WHERE (((tbl_1.id) Between " & [tx2] & " And " & [tx3] & "));" tbl_1 هو اسم الجدول الذي يحتوي على البيانات tx2 و tx3 هي الحقول التي اشرنا اليها سابقا ووضعنا لها قيمة افتراضية الان زر الامر الاول اسميناه التالي ووضعنا فيه الكود If Me.tx2 = 1900 Or Me.tx3 = 2000 Then: Exit Sub Me.tx2 = Me.tx2 + 100 Me.tx3 = Me.tx3 + 100 Me.sub_frm.Form.RecordSource = [tx10] Me.sub_frm.Requery وزر الامر الثاني اسميناه السابق ووضعنا فيه الكود If Me.tx2 = 1 Or Me.tx3 = 100 Then: Exit Sub Me.tx2 = Me.tx2 - 100 Me.tx3 = Me.tx3 - 100 Me.sub_frm.Form.RecordSource = [tx10] Me.sub_frm.Requery والنتيجة يعرض لنا عند النقر على التالي 100 سجل ثم عند النقر الـ 100 التاليه وهكذا ومثله ايضا في زر الامر السابق تحديد الحد الاعلى للسجلات ممكن اخذه بطريقة اليه ولكن انا كتبته بشكل مباشر حاولت ان اكتب الاكواد بطريقة بسيطة لسهولة ايصال المعلومة ولم اضع مثال لكوني اهتم فقط بالجانب النظري تحياني2 points
-
2 points
-
أهلا بك أخي .. تستطيع عمل ذلك من خلال إنشاء عدة استعلامات، ومن لوحة الخصائص Top Values تكتب النسبة أو عدد السجلات المطلوب عرضها .. ثم تنشيء استعلام آخر تكتب فيه نسبة السجلات ومن المعايير تستخدم دالة ()Not In لإخباره بأن يظهر السجلات غير الموجودة في الاسعلام الأول .. وهكذا ( ملاحظة ظريفة 🙂 : عدم إرفاق السائل لملف للتطبيق عليه ، يعني أنه يكتفي بالشرح النظري ولا يحتاج للتطبيق العملي )2 points
-
2 points
-
بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته اليوم جئتكم بفكرة جديدة وإبداعية لتحديث نسخة الواجهات 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.rar1 point
-
1 point
-
ومن عيوبها ايضا تشابه ارقام الهارد دسك التي تحمل نفس المواصفات في بعض الأحيان وعلي كل وجدت لك هذا المرفق بمكتبتي وهو لأستاذنا @ابو جودي جزاه الله خيرا - لا اذكر اسم الموضوع للحصول علي الرقم التعريفي للجهاز UUID وهذا رقم فريد لكل جهاز من خلاله يتم التميز بين الأجهزة علي الشبكة - ولا يحتاج الي الاتصال بالانترنت لا تقلق ولا يتشابه به جهازين استعمله بكود الحماية الخاص بك Get UUID.mdb1 point
-
تجنباً لإهدار وقت الأساتذة وبما انه لا يمكن العمل على التخمين وليس هناك وقت لتقديم أكثر من حل ويرفض من صاحب الموضوع .. فلابد من رفع ملف مدعوم بشرح كافى عن المطلوب مع توضيح نطاق الخلايا التى تريد عمل المطلوب بها وشكرً !!!!1 point
-
بعد إذن جميع المشاركين أخي الكريم لا يلزمنا ضرب قيمة الخلية في 100 إذا حولنا النسبة المئوية لرقم عشري مثلا 80% تساوي 0.8 وكذلك 8% تساوي 0.08 يمكنك استعمال هذا السطر If Target.Value >= 0 And Target.Value <= 0.082 Then بالتوفيق1 point
-
1 point
-
حضرتك لم ترفق النموذج لاتأكد من الخطأ لهذا عملت نموذج بناء على معطياتك في الاستعلام1 point
-
1 point
-
1 point
-
وعليكم السلام ورحمه الله وبركاته مشاركه مع اخى ومهندسنا العزيز @Eng.Qassim جزاه الله كل خير 💐 اولا يجب الابتعاد عن تسميه الكائنات كالجداول والنماذج وغيرها وكذلك عن تسميه الحقول بالعربى واستخدام خاصيه التسميه التوضيحيه واكتب فيها بالعربى واذا كان الاسم مكون اسمين لا تستخدم مسافات بينهم يفضل الابتداء بحرف كابتل او علامه _ للفصل بينهم بالنسبه لتصميم النموذج ليس من المنطقى وضع حقول للقيم لكل مرحله قمت بالتعديل واستخدام استعلام التحديث وتشغيله فى حدث بعد التحديث لحقل المرحله اكتب القيم المناسبه لكل مرحله ثم قم باختيار المرحله لتحديثها ارجو ان يكون التعديل مناسب لك بالتوفيق اخوانى school.accdb1 point
-
السلام عليكم مشاركه مع اخوانى واساتذتى جزاهم الله عنا كل خير استخدم القناع التالى 00/00/"202"0;0;_ بالتوفيق Database1.accdb1 point
-
بسيطة ان شاء الله اتفضل يا سيدى New Microsoft Access Database (2-1).accdb1 point
-
وعليكم السلام ورحمة الله وبركاته في نموذج دخول المستخدم ولنفرض مربع نص اسم المستخدم txtUserName ضع الكود التالي عند زر فتح الفورم الموجود في نموذج المستخدم Dim TempUser As TempVars [TempVars]![TempUser] = Me.txtUserName.Value ثم ضع الكود التالي في حدث عند التحميل للفورم لديك Me.txtUser = [TempVars]![TempUser] txtUser هو اسم مربع النص في الفورم لاظهار اسم المستخدم1 point
-
تم الحل بهذا الكود في زر البحث Private Sub CommandButton2_Click() Application.ScreenUpdating = False Me.ListBox1.ColumnWidths = "100,100,100" ListBox1.RowSource = Empty ListBox1.Clear Sheets("suppliers").Select For Each f In Range("a2:a" & Range("a10000").End(xlUp).Row) If f Like textbo1 & "*" Then listed = ListBox1.ListCount ListBox1.AddItem ListBox1.List(listed, 0) = f ListBox1.List(listed, 2) = f.Offset(0, 2) ListBox1.List(listed, 3) = f.Offset(0, 3) End If Next Dim x As Double For i = 0 To ListBox1.ListCount - 1 x = x + ListBox1.List(i, 3) Next i Me.Label9.Visible = True Me.TextBox8.Visible = True TextBox8.Value = x Dim v As Double For Z = 0 To ListBox1.ListCount - 1 v = v + ListBox1.List(Z, 2) Next Z Me.Label8.Visible = True Me.TextBox7.Visible = True TextBox7.Value = v Application.ScreenUpdating = True End Sub شكرا للجميع والله الموفق لي واياكم واذا لم استفيد بمساعدة احد يكفيني ان ممكن احد يستفيد من هذا الكود شكرا1 point
-
و عليكم السلام و رحمة الله و بركاته اخي الكريم ابو الحسن مرفق مثال لما طلبت : في حال كان جهازك متصل بالانترنت يعمل زر الاغلاق و في حال عدم الاتصال لا يعمل الزر و تظهر لك رسالة تفيد بذلك ارجو ان يكون هو المطلوب بالتوفيق internet Check.rar1 point
-
السلام عليكم 🙂 قبل كل شيء ، خلوني ابخر المكان عن العين ، علشان ما تصيب الحبايب 😁 . شكرا على الفكرة الجديدة ، بأرسال النسخة الجديدة من FE بإستخدام BE ، بدل عن سحبها بواسطة FE 🙂 في الواقع انا اكملت برمجة التحديث قريبا ، ودارت في بالي العديد ، وقرأت عن العديد من الطرق ، واستقر رأيي على الطريقة التقليدية ، مع العلم ان هذه الفكرة اتت على بالي (BE هو الذي يرسل التحديث) ، ولكن ارتأيت عدم استخدامها ، لأسباب التالية: ضعف الشبكة في موقع العمل ، وفي الواقع هذه تجربة جدا فريدة ، جعلتني اعيد النظر في الكثير من تفاصيل البرمجة ، وقد اُوفق لعمل موضوع خاص به إن شاء الله ، المستخدم (على الاقل 4 حاليا) ، يجب ان يُلبي طلب الزبائن ، بمعدل 3 زبائن في الدقيقة (والامل ان يكون اكثر) ، وبسبب ضعف الشبكة ، التركيز كان على جعل BE في حالة تأهب لخدمة المستخدم ، ولا نشغل BE بأي شيء آخر ، يجب ان يتم التحديث بدون تدخل المستخدم ، فهنا يجب ان نعرف مسار برنامج FE المستخدم ، تلقائيا ، وليس مكان البرنامج الاصل ، فربما ولسبب ما ، قام المستخدم بتغيير مكان المجلد الى مكان آخر ، كانت الفكرة ، ان لا استعمل نموذج في BE ، وانما عن طريق ادخال قيمة في حقل معين في جدول ، وهذا الحقل يقوم بتشغيل وحدة نمطية في BE ويقوم بعمل اللازم ، بهذه الطريقة: هذه المعلومة غير دقيقة ، فأول برنامج اكسس عملته لمؤسسة عام 2002 ، وضعت البرنامج كاملا على السيرفر ، وكان يستخدمة بين 5-8 اشخاص في اليوم ، والحمدلله الله ستر وما صارت مشكلة فيه 🙂 وحيا الله بالحبايب ، اللي ذكروني ، واللي ما ذكروني 🙂 جعفر1 point
-
السلام عليكم مشاركه مع اخى ومهندسنا العزيز @Eng.Qassim جزاه الله عنا كل خير 💐 قاعد البيانات المرفقه هى عباره عن واجه وغير مرفق قاعده البيانات الخلفيه التى تتصل معها قاعده البانات المرفقه مغلقه accde ومحول الامتداد لها accdb فيجب عليك مراجعه قاعده البيانات قبل التحويل وتعديل الكود الاخير الذى اضفته وقام بتعطيلها بالتوفيق1 point
-
استاذ علي ...خدني على قد عقلي ...فانا شيخ كبير هل كان البرنامج يشتغل عندك منذ فترة وفجأة ظهرت هذه المشكلة ؟ ام انك قمت بالتعديل على بعض الاكواد وظهرت المشكلة ... ياريت نسخة مبسطة من البرنامج لديك ... الموضوع مهم ... واعتقد انك اول شخص يطرحه خلينا نستغل استاذنا ابو موسى في هذا الموضوع 😄1 point
-
تجربتي تقول ، هذا ليس حجمه الحقيقي ، فبعد الضغط والاصلاح ستحصل على الحجم الحقيقي 🙂 انا لا استغني عن البرنامج في المرفق التالي ، وعندي على سطح المكتب ، وكلما عملت تحديث لأي برنامج ، لازم استعمل البرنامج التالي ، لأنه: يعمل ضغط واصلاح للبرنامج ، يقوم بتنظيف الكود من متبقى الذاكرة (ليست ذاكرة مؤقته فتتنظف بخروجك من البرنامج ، وانما ذاكرة اكواد الاكسس الثابتة ، وفي الواقع الاهم من الخطوتين اعلاه ، هو عمله نسخة احتياطية للبرنامج. جعفر1 point
-
حقيقة آثار فضولي ان اري مرفق اخي وأستاذي @ابو جودي بعد ان اطلعت علي الكود بمشاركته الأولي ومن باب الفضول ايضا قمت بوضع رقمي القومي لأنظر هل سيصل الكود الي الصعيد ام لا ولا ادري لماذا اتجهت عيني مباشرة الي العمر ولن ما ادهشني ان عمري قد اصبح 12 عاما فقط حقيقة قد شككت في حساباتي انا ولم اشك بكود استاذنا ابو جودي - واخذت ادعو له بظهر الغيب ان نبهني ان العمر لم يمضي وشمرت عن ساعد الجد لادرك ماظننت انه قد فات في عمر الشباب - ولات حين ادراك 😔 - ولكن قد قمت بالعبث بكود استاذنا وقام بحساب العمر صحيحا علي ما اعتقد وعدلت بعزل نوع الخطأ بعمود مستقل حسب ما فهمت من كلام الاستاذ محمد صاحب الموضوع وهذا المرفق بعد كل هذه الثرثرة قاعدة بيانات موظفين - (3).accdb ملاحظة قمت بحذف بياناتي الشخصية حتي لا يطلع احد علي العمر الحقيقي1 point
-
اتفضل يا سيدى لا تنسى وضع افضل اجابة وهذه هى الاكواد المستخدمة Dim CalcAge As String Public Function IDData(IDNumber As Variant, Optional stype As Integer = 1) As Variant If IsNull(IDNumber) Or IDNumber = "" Or IDNumber = "" Or IDNumber = Empty Or IDNumber = vbNullString Or Len(IDNumber) = 0 Then IDData = "" Exit Function ElseIf Len(IDNumber) < 14 Then IDData = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1608") & ChrW("1605") & ChrW("1609") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1589") & ChrW("1581") & ChrW("1610") & ChrW("1581") & ChrW("32") & ChrW("40") & ChrW("32") & ChrW("1571") & ChrW("1589") & ChrW("1594") & ChrW("1585") & ChrW("32") & ChrW("1605") & ChrW("1606") & ChrW("32") & ChrW("49") & ChrW("52") & ChrW("32") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("41") Exit Function ElseIf Len(IDNumber) > 14 Then IDData = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1608") & ChrW("1605") & ChrW("1609") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1589") & ChrW("1581") & ChrW("1610") & ChrW("1581") & ChrW("32") & ChrW("40") & ChrW("32") & ChrW("1571") & ChrW("1603") & ChrW("1576") & ChrW("1585") & ChrW("32") & ChrW("1605") & ChrW("1606") & ChrW("32") & ChrW("49") & ChrW("52") & ChrW("32") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("41") Exit Function ElseIf Not IsNumeric(IDNumber) Then IDData = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1608") & ChrW("1605") & ChrW("1609") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1589") & ChrW("1581") & ChrW("1610") & ChrW("1581") & ChrW("32") & ChrW("40") & ChrW("32") & ChrW("1604") & ChrW("1575") & ChrW("1576") & ChrW("1583") & ChrW("32") & ChrW("1605") & ChrW("1606") & ChrW("32") & ChrW("1573") & ChrW("1587") & ChrW("1578") & ChrW("1582") & ChrW("1583") & ChrW("1575") & ChrW("1605") & ChrW("32") & ChrW("1571") & ChrW("1585") & ChrW("1602") & ChrW("1575") & ChrW("1605") & ChrW("32") & ChrW("1601") & ChrW("1602") & ChrW("1591") & ChrW("32") & ChrW("41") Exit Function ElseIf Not IsDate(Format(IIf(Left(IDNumber, 1) = 3, Mid(IDNumber, 2, 2) + 2000, Mid(IDNumber, 2, 2) + 1900) & "/" & Mid(IDNumber, 4, 2) & "/" & Mid(IDNumber, 6, 2), "yyyy/mm/dd")) Then IDData = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1608") & ChrW("1605") & ChrW("1609") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1589") & ChrW("1581") & ChrW("1610") & ChrW("1581") & ChrW("32") & ChrW("40") & ChrW("32") & ChrW("1582") & ChrW("1591") & ChrW("1571") & ChrW("32") & ChrW("1601") & ChrW("1609") & ChrW("32") & ChrW("1578") & ChrW("1575") & ChrW("1585") & ChrW("1610") & ChrW("1582") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1605") & ChrW("1610") & ChrW("1604") & ChrW("1575") & ChrW("1583") & ChrW("32") & ChrW("41") Exit Function Else If stype = 1 Then Dim DateOfBirth As Date: DateOfBirth = Format(IIf(Left(IDNumber, 1) = 3, Mid(IDNumber, 2, 2) + 2000, Mid(IDNumber, 2, 2) + 1900) & "/" & Mid(IDNumber, 4, 2) & "/" & Mid(IDNumber, 6, 2), "yyyy/mm/dd") IDData = DateOfBirth Dim strYear As String: strYear = ChrW("1587") & ChrW("1606") & ChrW("1607") Dim strMnth As String: strMnth = ChrW("1588") & ChrW("1607") & ChrW("1585") Dim strDy As String: strDy = ChrW("1610") & ChrW("1608") & ChrW("1605") CalcAge = CalcAgeY(DateOfBirth, Date) & " " & strYear & " " & "," & CalcAgeM(DateOfBirth, Date) & " " & strMnth & " " & "," & CalcAgeD(DateOfBirth, Date) & " " & strDy ElseIf stype = 2 Then Dim strRegionCode As String: strRegionCode = Mid(IDNumber, 8, 2) Select Case strRegionCode Case Is = "01": IDData = ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1575") & ChrW("1607") & ChrW("1585") & ChrW("1577") Case Is = "02": IDData = ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1587") & ChrW("1603") & ChrW("1606") & ChrW("1583") & ChrW("1585") & ChrW("1610") & ChrW("1577") Case Is = "03": IDData = ChrW("1576") & ChrW("1608") & ChrW("1585") & ChrW("1587") & ChrW("1593") & ChrW("1610") & ChrW("1583") Case Is = "04": IDData = ChrW("1575") & ChrW("1604") & ChrW("1587") & ChrW("1608") & ChrW("1610") & ChrW("1587") Case Is = "11": IDData = ChrW("1583") & ChrW("1605") & ChrW("1610") & ChrW("1575") & ChrW("1591") Case Is = "12": IDData = ChrW("1575") & ChrW("1604") & ChrW("1583") & ChrW("1602") & ChrW("1607") & ChrW("1604") & ChrW("1610") & ChrW("1577") Case Is = "13": IDData = ChrW("1575") & ChrW("1604") & ChrW("1588") & ChrW("1585") & ChrW("1602") & ChrW("1610") & ChrW("1577") Case Is = "14": IDData = ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1604") & ChrW("1610") & ChrW("1608") & ChrW("1576") & ChrW("1610") & ChrW("1577") Case Is = "15": IDData = ChrW("1603") & ChrW("1601") & ChrW("1585") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1588") & ChrW("1610") & ChrW("1582") Case Is = "16": IDData = ChrW("1575") & ChrW("1604") & ChrW("1594") & ChrW("1585") & ChrW("1576") & ChrW("1610") & ChrW("1577") Case Is = "17": IDData = ChrW("1575") & ChrW("1604") & ChrW("1605") & ChrW("1606") & ChrW("1608") & ChrW("1601") & ChrW("1610") & ChrW("1577") Case Is = "18": IDData = ChrW("1575") & ChrW("1604") & ChrW("1576") & ChrW("1581") & ChrW("1610") & ChrW("1585") & ChrW("1577") Case Is = "19": IDData = ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1587") & ChrW("1605") & ChrW("1575") & ChrW("1593") & ChrW("1610") & ChrW("1604") & ChrW("1610") & ChrW("1577") Case Is = "21": IDData = ChrW("1575") & ChrW("1604") & ChrW("1580") & ChrW("1610") & ChrW("1586") & ChrW("1577") Case Is = "22": IDData = ChrW("1576") & ChrW("1606") & ChrW("1610") & ChrW("32") & ChrW("1587") & ChrW("1608") & ChrW("1610") & ChrW("1601") Case Is = "23": IDData = ChrW("1575") & ChrW("1604") & ChrW("1601") & ChrW("1610") & ChrW("1608") & ChrW("1605") Case Is = "24": IDData = ChrW("1575") & ChrW("1604") & ChrW("1605") & ChrW("1606") & ChrW("1610") & ChrW("1575") Case Is = "25": IDData = ChrW("1571") & ChrW("1587") & ChrW("1610") & ChrW("1608") & ChrW("1591") Case Is = "26": IDData = ChrW("1587") & ChrW("1608") & ChrW("1607") & ChrW("1575") & ChrW("1580") Case Is = "27": IDData = ChrW("1602") & ChrW("1606") & ChrW("1575") Case Is = "28": IDData = ChrW("1571") & ChrW("1587") & ChrW("1608") & ChrW("1575") & ChrW("1606") Case Is = "29": IDData = ChrW("1575") & ChrW("1604") & ChrW("1571") & ChrW("1602") & ChrW("1589") & ChrW("1585") Case Is = "31": IDData = ChrW("1575") & ChrW("1604") & ChrW("1576") & ChrW("1581") & ChrW("1585") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1571") & ChrW("1581") & ChrW("1605") & ChrW("1585") Case Is = "32": IDData = ChrW("1575") & ChrW("1604") & ChrW("1608") & ChrW("1575") & ChrW("1583") & ChrW("1610") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1580") & ChrW("1583") & ChrW("1610") & ChrW("1583") Case Is = "33": IDData = ChrW("1605") & ChrW("1591") & ChrW("1585") & ChrW("1608") & ChrW("1581") Case Is = "34": IDData = ChrW("1588") & ChrW("1605") & ChrW("1575") & ChrW("1604") & ChrW("32") & ChrW("1587") & ChrW("1610") & ChrW("1606") & ChrW("1575") & ChrW("1569") Case Is = "35": IDData = ChrW("1580") & ChrW("1606") & ChrW("1608") & ChrW("1576") & ChrW("32") & ChrW("1587") & ChrW("1610") & ChrW("1606") & ChrW("1575") & ChrW("1569") Case Is = "88": IDData = ChrW("1605") & ChrW("1608") & ChrW("1575") & ChrW("1604") & ChrW("1610") & ChrW("1583") & ChrW("32") & ChrW("1582") & ChrW("1575") & ChrW("1585") & ChrW("1580") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1580") & ChrW("1605") & ChrW("1607") & ChrW("1608") & ChrW("1585") & ChrW("1610") & ChrW("1577") Case Else: IDData = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1602") & ChrW("1605") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1602") & ChrW("1608") & ChrW("1605") & ChrW("1609") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1589") & ChrW("1581") & ChrW("1610") & ChrW("1581") & ChrW("32") & ChrW("40") & ChrW("32") & ChrW("1582") & ChrW("1591") & ChrW("1571") & ChrW("32") & ChrW("1601") & ChrW("1609") & ChrW("32") & ChrW("1603") & ChrW("1608") & ChrW("1583") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1605") & ChrW("1581") & ChrW("1575") & ChrW("1601") & ChrW("1592") & ChrW("1577") & ChrW("32") & ChrW("41") End Select ElseIf stype = 3 Then Dim GenderCode As Long: GenderCode = Mid(IDNumber, 13, 1) Select Case GenderCode Case Is = 1, 3, 5, 7, 9: IDData = ChrW("1584") & ChrW("1603") & ChrW("1585") Case Is = 0, 2, 4, 6, 8: IDData = ChrW("1571") & ChrW("1606") & ChrW("1579") & ChrW("1609") Case Else: IDData = "" End Select ElseIf stype = 4 Then IDData = CalcAge End If End If End Function Function CalcAgeY(vDate1 As Date, vdate2 As Date) Dim vYears As Integer, vMonths As Integer, vDays As Integer vMonths = DateDiff("m", vDate1, vdate2) vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) If vDays < 0 Then vMonths = vMonths - 1 vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) End If vYears = vMonths \ 12 vMonths = vMonths Mod 12 CalcAgeY = vYears End Function Function CalcAgeM(vDate1 As Date, vdate2 As Date) Dim vYears As Integer, vMonths As Integer, vDays As Integer vMonths = DateDiff("m", vDate1, vdate2) vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) If vDays < 0 Then vMonths = vMonths - 1 vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) End If vYears = vMonths \ 12 vMonths = vMonths Mod 12 CalcAgeM = vMonths End Function Function CalcAgeD(vDate1 As Date, vdate2 As Date) As String Dim vYears As Integer, vMonths As Integer, vDays As Integer vMonths = DateDiff("m", vDate1, vdate2) vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) If Day(vDate1) = 31 Then vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) - 1 If vDays < 0 Then vMonths = vMonths - 1 vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) End If vYears = vMonths \ 12 vMonths = vMonths Mod 12 CalcAgeD = vDays End Function على اعتبار أن xxx = الرقم القومى IDData(xxx, 1) او IDData(xxx) >>---> تاريخ الميلاد IDData(xxx, 2) >>---> محافظة الميلاد IDData(xxx, 3) >>---> النوع IDData(xxx, 4) >>---> حساب العمر قاعدة بيانات موظفين - (3).accdb1 point
-
1 point
-
السلام عليكم ورحمة الله وبركاته 📜برنامج المخزون والفواتير الشامل الإصدار الرابع 2020 البرنامج هو تحديث للاصدارات السابقة من نفس البرنامج اولا وقبل كل شيئ اعتذر عن التأخير فى اطلاق هذا الاصدار نظرا لانشغالي الدائم وظروف خارجه عن الارادة. كما هو معروف عن برنامج المخزون و الفواتير الشامل: واجهة تطبيقية كاملة علي الاكسيل يصلح لكافة اغراض المبيعات و المشتريات وذمم عملاء وموردين و حساب المصروفات مع ميزانية عامه توضح الربح و الخساره. البرنامج مليئ بافكار جديده فى طريقة ادخال الاصناف داخل الفواتير و استدعائها و التعديل عليها.بالاضافه الي طرق جديده فى تصميم الفاتورة كما يتميز البرنامج بكثرة التقارير وسهولة الحصول عليها فى اى وقت يعمل علي جميع اصدارات الاكسيل بنواتين 32 أو 64 بت ويفضل دائما الاصدارات الاحدث من الاكسيل اوفيس 2019 و 365 البرنامج مجاني بنسبة 100 % للاستخدام الشخصي ولا يوجد به تاريخ انتهاء. وتستطيع استخدامه بامان تام.ويمنع بيع البرنامج او اي ربح تجاري بدون الرجوع الي المالك الاصلي.و الله الشاهد علي ذلك. تم تصميم البرنامج بمواصفات خاصه ويعمل للشركات الصغيره الي متوسطة الحجم او للمشاريع الخاصه .وهو فى الاصل برنامج تجارى ولكنى اقدمه هنا للمنتدى وللأخوة الاعضاء بصورة مجانية. تم اطلاق الاصدار الاول من هذا البرنامج عام 2012.وكل ما يلزم هو وجود نسخة اكسيل علي جهازك.وسيفي بالغرض تماما. هذا هو اخر اصدار للبرنامج علي اكسيل و الاصدار الخامس و لمزيد من التحسينات الكبيره سوف يتم تطويره إن شاء الله بلغة برمجه اخري وقاعده بيانات اخري. الدخول الاول:اسم المستخدم "مدير" و الباسورد 123 تم ارفاق نسختين من البرنامج نسخة الاستخدام المباشر كمستخدم ويمكنك استخدامها فى عملك مباشرة. نسخة اخري للتعلم مفتوحة المصدر وتوجد بها جميع الاكواد لجميع الشاشات داخل البرنامج للتعلم او التعديل عليها كما هو الغرض الرئيسي من هذا الصرح العظيم. يمكنك الرجوع الي الاصدارات السابقة حيث يوجد شرح كامل لكيفية استخدام البرنامج لاول مرة. توجد الروابط للاصدارات السابقة و الشرح اسفل هذا الموضوع . 📑الجديد في هذا الاصدار (2020)SIS Ver.4: شاشة تصميم الفواتير و هي من الشاشات الجديدة وبها الكثير من الاكواد الجديده فى الاكسيل (علي حسب علمي) حيث تمكنك من وضع اللوجو الخاص بالمؤسسه او الشركة الخاصه بك كما يمكنك ايضا وضع بياناتك اسفل الفاتورة كرقم التليقون و العنوان و ...... التحكم الكامل في بعض القيم و ظهورها داخل الفاتورة كرصيد العميل. شاشة اختيار عملة الدولة ووضع الضريبه او القيمه المضافه تمكنك هذه الشاشه من اختيار العمله علي حسب الدوله التي تعمل فيها. كما تمكنك من ضبط قيمة الضريبه او القيمه المضافه لفواتيرك شاشة ضبط صلاحيات المستخدمين بعد اضافة مستخدم جديد للبرنامج تستطيع ضبط صلاحيات المستخدم من الوصول الي جميع شاشات البرنامج شاشة حذف البيانات الغير مستخدمة بكل سهولة تستطيع حذف العملاء و الموردين او الاصناف الغير مستخدمة داخل البرنامج. شاشة الحركة المالية السريعة تستطيع ادخال سند صرف موردين او سند عميل بضغطة زر واحده. شاشة الفواتير الكثير من التحسينات تم ادارجها داخل شاشة الفواتير فاتورة المشتريات . انت من يقوم بوضع رقم الفاتورة الخاصه من المورد.بدلا من وضعها اتوماتيكيا كالاصدار السابق. اضافة خصم اجمالي علي الفاتورة. يتم تحديد الخصم كنسبه مئويه او خصم مبلغ مقطوع. اضافة الضريبه علي الفاتورة ويمكن تحديد قيمتها يدويا او تثبيتها من خلال شاشة البيانات الجديده وضبط الضريبه او القيمه المضافه علي حسب الدولة. مبيعات نقدي: فى حالة اختيار هذا النوع من الفواتير يتم ادراج سند قبض مباشره الي حساب العميل مع حفظ الفاتورة لانها مبيعات نقدية. ظهور رصيد العميل الحالي داخل الفاتورة. و التحكم في ظهوره من خلال شاشة تصميم الفاتورة. زر لسداد كامل الفاتورة مباشرة وادراج سند قبض او سند صرف داخل حساب العميل/المورد سند بالمبلغ المدفوع داخل الفاتورة وتسوية حساب العميل او المورد. شاشة الحركات المالية ادراج الكثير من الحركات المالية داخل سند الصرف. شاشة جديده لحساب رواتب وجميع الحسابات للموظفين العاملين فى المؤسسة او الشركة يوجد الكثير من الاضافات و التحسينات علي كل الشاشات والتقارير داخل البرنامج . تستطيع اكتشاف المزيد و المزيد اثناء استخدام البرنامج. التعامل مع رصيد اول المده (كميات الاصناف- حسابات العملاء/الموردين) تم الاستغناء عن شاشة اكواد البيانات والجرد فى هذا الاصدار وكانت تستخدم لوضع رصيد اول المده للاصناف. وعوضا عن ذلك ولحساب المخزون بطريقه منظمه يجب ان يتم وضع كميات اول المده لجميع الاصناف من خلال فاتورة مشتريات باسعار شراء محدده حتي يتم ادراجها وحسابها بطريقه دقيقه.وايضا فى حالة رصيد سابق للعملاء والموردين يجب ان يتم ادخاله من خلال شاشة الحركات الماليه( حركة ماليه رصيد اول مده او ترحيل لحساب عميل/مورد) طباعة الباركود لا تزال غير مفعله ايضا فى هذا الاصدار. 👁️🗨️شرح كيفية استخدام البرنامج وادخال البيانات من الاصدارت السابقة:(برجاء مراجعة الروابط التالية) شرح برنامج المخزون و الفواتير الشامل(مشاركة داخل المنتدى) استخدام البرنامج لاول مره من الاصدار الثالث شرح برنامج المخزون و الفواتير الشامل( ملف تنفيذى... 6MB رابط خارجى على موقع ميديا فاير) 🏷️تحميل البرنامج: النسخة الاولي SIS 4.566EO : هى نسخة المستخدم النهائي مجانيه 100 % لاعضاء المنتدي الكرام وليس لها تاريخ انتهاء وكما ذكر سابقا هي للاستخدام الشخصي فقط. 💳SIS 4.566EO.rar النسخة الثانيه SIS 4 Learning : هي نسخة للمطورين و الباحثين عن التعلم وهي نسخة مفتوحة المصدر تحتوي علي جميع اكواد الشاشات داخل البرنامج. 🧼SIS4(Learning).rar إن شاء الله سوف اقوم بالرد علي استفسارات اعضائنا الكرام عندما يتوفر لي الوقت و اعتذر مقدما عن اي تاخير نظرا لانشغالي الدائم. اخيرا أحب انا أشكر جميع مشرفي و اعضاء هذا الصرح العظيم. واتمني من الله ان يكون هذا العمل خالصا لوجه الله سبحانه و تعالي و انا اكون قد قدمت تجربه جيده لهذا النوع من البرامج علي الاكسيل وان ينفع به جميع اعضاء المنتدي الكرام1 point
-
السلام عليكم إخواني الكرام ... أشعر أن المنتدى كله مركز على الأسئلة والطلبات أكثر من الموضوعات التعليمية .. فإليكم درس خفيف ظريف ولن يستغرق منك في دراسته أكثر من 4 دقائق .. ************** نتحدث بشكل سريع عن استخدام دالة VLOOKUP للبحث عن جزء من النص داخل نطاق .. إليكم الملف المرفق به الشرح ، وأي استسفار أو سؤال لا تتردد واسأل ، لا تخجل من السؤال مهما بدا تافهاً لأن السؤال طريق ..طريق (وكله مطبات) بس هو طريق المعرفة .. VLOOKUP Text Inside A String.rar1 point
-
كل عام أنت ومن تحب بكل خير أخي نادر شكرا لمرورك الكريم1 point
-
الموضوع بسيط أخي الكريم يمكنك الاستغناء عن السطر الأخير في الدالة ووضع كود لتفقيط كل رقم من الأرقام الناتجة ساعتها ستحصل على مثلا: ثلاثة شهور ويومان واثنتا عشرة ساعة وعشرون دقيقة وخمس وثلاثون ثانية ولكن اعذرني هذا الكلام لا يتفق مع تحديث الفارق كل ثانية1 point
-
أكرمك الله أخي شاعر وشكرا على كلماتك الرقيقة وإذا كان استفسارك أخي متعلق بالموضوع فلا تتردد في طرحه وإذا لم يكن كذلك يمكنك فتح موضوع جديد بهذا الخصوص كل عام وجميع الإخوة بكل خير1 point
-
أخي الكريم كل عام أنتم بخير سؤالك هذا تعجز شركة ميكروسوفت عن الإجابة عنه لأنه لو كانت الإجابة الأفضل هو الأكسس لما أصدرت الشركة برنامج الإكسل والعكس صحيح كذلك ولكن كما قلت أنت وأهم ما يميز الأكسس هو استخدامك للغة الاستعلامات sql وإمكانية ربط الجداول وأهم ما يميز الإكسل هو كثرة عدد الأعمدة 165000 عمود تقريباً ( لأن أقصى عدد للحقول في برنامج الأكسس هو 255 حقل فقط ) فإذا كانت برامجك تحتاج عدد كبير من الحقول يتجاوز 255 حقل مثل موضوع الكنترولات والمرتبات مثلا يفضل عملها بالإكسل وإذا كانت البرامج قليلة في عدد الحقول وتحتاج لاحترافية في تنسيق مخرجات البرنامج ( التقارير) فيفضل الأكسس والله أعلم1 point
-
يمكنك عمل ذلك أخي الكريم بتعديل السطر الأخيرفي الدالة إلى التالي date_diff = IIf(years = 0, "", years & " عام و ") & IIf(months = 0, "", months & " شهر و ") & IIf(days = 0, "", days & " يوم و ") & IIf(Hours = 0, "", Hours & " ساعة و ") & IIf(Minutes = 0, "", Minutes & " دقيقة ") & IIf(Seconds = 0, "", "و " & Seconds & " ثانية ")1 point
-
المشكلة في ملفك أخي الكريم هي جعلك لتنسيق التاريخ في حقل الآن hh:mm:ss والصواب yyyy/mm/dd hh:mm:ss حتى يظهر كما بالصورة المرفقة مني وكذلك التاريخ الثاني .... بالنسبة لآلية عمل الدالة من خلال تتبع الكود تجد أن : السنين هي السنة الجديدة - السنة القديمة وإذا كان الشهر القديم أكبر من الشهر الجديد يتم طرح سنة من السنوات وإضافة 12 شهر على الشهر الحالي وإذا كان الشهر الحالي أكبر فالشهور هي طرح الشهر الحالي - الشهر القديم وهكذا1 point
-
كل عام أنتم بخير أخي الكريم أبا خليل لم أنتبه إلى أنه يوجد تنسيق في مربع النص لذلك بنيت فكرتي على أن يظهر الفارق بنصه الموجود في الكود .... وطبعاً كما قلت يجب الاستغناء عن تنسيق التاريخ الموجود في مربع النص بالنسبة للأخ lording كل عام والجميع بكل خير1 point
-
بارك الله لك إنها سليمة 100% وهذا الدليل هذه هي البداية أن تحاول1 point
-
نعم هذا ممكن إذا كان التاريخ القديم أيضا مسجل بتنسيق به الساعة والدقيقة والثانية وليس مجرد تاريخ به اليوم والشهر والسنة لأن في هذه الحالة سيتم اعتبار الوقت هو الثانية عشرة صباحاً بمعنى 1/1/2000 تساوي 1/1/200 00:00:00 ولكن أترك لك فرصة استنباط خط سير الكود وتنفيذه على الساعات والدقائق والثواني كما تم تنفيذه على السنين والشهور والأيام وتذكر المثل الرائع لا تعطني سمكة ولكن علمني كيف أصطاد1 point
-
تفضل أخي الكريم تم عمل دالة جديدة لحساب الفرق بين التاريخين mas_lordring2-29-10.rar1 point
-
أخي الفاضل ربما إذا حددت لي ما السطر الغامض عليك في الكود أوضحه لك أما إذا كنت لا تعرف شيئا عن الأكواد فأنصحك بمتابعة هذه الدورة عن الأكواد من الصفر أولا ثم مراجعة أي كود مكتوب https://www.officena.net/ib/index.php?showtopic=39323 لأنه من الواضح لي أن: كود جلب أسماء الأبناء عمله بدلا عنك أستاذ Lion heart وهذا الكود الذي يتأسس عليه الكود الأول قمت به لك ونحن هنا للمرة المليون لا نقوم بعمل برامج جاهزة للناس مجانا (ولا تبخسوا الناس أشياءهم) خالص الدعوات بالتوفيق0 points