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

الردود الموصى بها

قام بنشر


السلام عليكم
في البداية كل عام والجميع بالف خير

تقرير يستخدم لتسجيل الحضور والغياب

كيف يمكن ملئ هذه الحقول بايام الاسبوع والتاريخ لشهر معين
يتم اختياره بدون يوم الجمعة من الشهر مثلا اذا كان لدينا الشهر تشرين الاول
يبدأ من الثلاثاء 1 / 10
وهكذا صعودا
وعندما ياتي شهر اخر اختار الشهر ويتم تلقائيا تعبئة الحقول

 

مثال.rar

  • Like 1
قام بنشر

السلام عليكم 

رغم عدم خبرتي في الاكسس الا اني حاولت التعلم في مثالك 

في المثال بالضغط على التقرير سيظهر مربعي إدخال (الاول لتاريخ بداية الشهر الحالي مثال 01/10/2013) والأخر لتاريخ نهاية الشهر الحالي مثال (31/10/2013)  علماً أنه بإمكانك التعديل في التاريخ الافتراضي

جرب واعلمني بالنتيجة فقد حاولت الكثير حتى وصلت اليها 

 

مثال.rar

قام بنشر

السلام عليكم

كل عام وانت بالف خير

 

تسلم اخي العزيز ويارب ان شاء الله يعاد عليك العيد بالخير والبركة

 الحل ممتاز والفكرة رائعة جدا

الكود متعب؟؟؟؟

قام بنشر

ماشاء الله أخي أبو احمد

يبدو انك طلقت الأكسل وداخل للأكسس بقوة

عيد مبارك عليك وعلي اخي ابو خليل واخونا ابو ادم الله يذكره بالخير وان شاء الله يكون في صحة وعافية

تحياتي,,,

  • Like 1
قام بنشر

يالله 

الاساتذة الكبار جهابذة الاكسس اعجبهم العمل 

يبدو اني في الطريق الصحيح ولو انه طويل جداً للوصول الى ربع ربع ربع ما عندكم 

==============================

 

السلام عليكم

اكون ممنون اذا شرحت الكود بالتفصيل

 

ان شاء الله

قام بنشر

هذا هو الكود بالكامل وسيتم شرحه سطر سطر ان شاء الله

Private Sub Report_Open(Cancel As Integer)
On Error GoTo 2
Dim StartDate As Date, EndDate As Date, K As Integer, I As Integer
StartDate = InputBox("تاريخ بداية الشهر", "تنبيه", 1 & "/" & Month(Date) & "/" & Year(Date))
EndDate = InputBox("تاريخ نهاية الشهر", "تنبيه", DateAdd("d", -1, DateAdd("m", 1, 1 & "/" & Month(Date) & "/" & Year(Date))))
If DateDiff("d", StartDate, EndDate) > 31 Then Exit Sub
For I = 0 To DateDiff("d", StartDate, EndDate)
If Weekday(StartDate + I, vbFriday) = 1 Then GoTo 1
Me.Controls("Date" & K + 1).Caption = Format(StartDate + I, "ddd   d/m")
K = K + 1
1 Next
2 End Sub
Private Sub Report_Open(Cancel As Integer)

حدث فتح التقرير

=======================================================

On Error GoTo 2

في حالة خطاء في الكود يتم الانتقال الى السطر الذي به الرقم 2 الموجودة في نهاية الكود لانهاء الكود ومن امثلة الاخطاء التي تقع كتابة نص في مربع الأدخال او كتابة تاريخ غير موجود مثل 30/02/2013 وهكذا

=======================================================

Dim StartDate As Date, EndDate As Date, K As Integer, I As Integer

الأعلان عن المتغيرات ونوعها وهنا لدينا متغييرين نوعهما تاريخ هما (EndDate  - StartDate ) ومتغيرين نوعهما عدد صحسح هما( K - I)

=======================================================

StartDate = InputBox("تاريخ بداية الشهر", "تنبيه", 1 & "/" & Month(Date) & "/" & Year(Date))

هنا تم التعريف بقيمة StartDate وهي عبارة عن مربع إدخال InputBox وكما هو معروف فان مربع الادخال له عدة متغيرات ومنها (ما تم استخدامه) 

شاهد الصورة

post-59952-0-73713400-1382206073_thumb.j

 

1. prompt  هنا عبارة عن النص الموجود في مربع الادخال ويستخدم للتوضيح "تاريخ بداية الشهر"

2. title       عنوان مربع الادخال  "تنبيه"

3.  Default  القيمة الافتراضية لمربع النص (تم استخدامها بدل الادخال اليدوي ) 

 

في القيمة الافتراضية لمربع النص تم استخلاص تاريخ بداية الشهر الحالي بواسطة هذه الدالة 1 & "/" & Month(Date) & "/" & Year(Date)

وهي عبارة عن الرقم 1 و شرطة التاريخ / واستخراج الشخر من التاريخ الحالي بدالة Month  و / واستخراج السنة من التاريخ الحالي بدالة Year لينتج عند تاريخ بهذا الشكل 1/10/2013 

========================================================

EndDate = InputBox("تاريخ نهاية الشهر", "تنبيه", DateAdd("d", -1, DateAdd("m", 1, 1 & "/" & Month(Date) & "/" & Year(Date))))

نفس مواصفات الشرح السابق ولكن هنا تم استخدام دالة DateAdd لاستخراج تاريخ أخر يوم في الشهر 

كما هو معلوم فدالة DateAdd تتكون من تلاثة متغيرات هي 

1.  interval  الفترة المراد اضافتها الى التاريخ 

2.  number  عدد الأيام (بالسالب أو الموجب )

3.  date   التارخ المراد الاضافة علية (بالسالب أو الموجب)

 

وقد أستخدمت مرتين الاولى لأضافة شهر على التاريخ الذي تم كتابته بهذه الطريقة (كما شرحت سابقاً) 1 & "/" & Month(Date) & "/" & Year(Date))

وكانت الدالة كالتالي 

DateAdd("m", 1, 1 & "/" & Month(Date) & "/" & Year(Date)) 

وسينتج منها تاريخ هو 01/11/2013 

 

ثم استخدمت الدالة DateAdd مرة اخرى لإنقاص يوم واحد من هذا التاريخ ليعطينا اخر يوم في الشهر السابق لهذا التاريخ وهو 31/10/2013

وكانت المعادلة ككل كالتالي 

DateAdd("d", -1, DateAdd("m", 1, 1 & "/" & Month(Date) & "/" & Year(Date))))

======================================================================

If DateDiff("d", StartDate, EndDate) > 31 Then Exit Sub

جملة شرطية بإستخدام الدالة DateDiff (دالة لأستخراج عدد الايام بين تاريخين) 

فاذا تجاوز عدد الايام بين تاريخ بداية الشهر المدخل ونهايته يتم الخروج من الكود

=====================================================================

For I = 0 To DateDiff("d", StartDate, EndDate)

حلقة تكرارية تبداء من صفر وتنتهي حتى (عدد الايام بين التاريخين)

========================================

If Weekday(StartDate + I, vbFriday) = 1 Then GoTo 1

جملة شرطية ففي كل حلقة تكرارية يزيد تاريخ البداية برقم قيمة المتغير i  ويتم فحص التاريخ بدالة Weekday فاذا صادف الجمعة ينتقل الكود الى السطر الذي به الرقم 1 وهو بداية حلقة تكرارية جديدة لكن دو تنفيذ السطور المحصورة بينهما (ويستخدم هذا السطر لتجاوز يوم الجمعة حسب ما هو مطلوب في هذا الموضوع)

==============================================

Me.Controls("Date" & K + 1).Caption = Format(StartDate + I, "ddd   d/m")

هنا زبدة الكلام 

في كل حلقة تكرارية سيزداد قيمة المتغير i  واحد فاذا لم يكن حاصل مجموع تاريخ البداية وقيمة المتغير i  يوم جمعة فسيتم تنفيذ هذا السطر 

في البداية نعرف ان المتغير K   تم الاعلان عنه كعدد صحيح وستكون قيمته صفر مالم يعلن غير ذلك 

كما نعرف ان الليبلات (التسمية) تم تسميتهن بإسم Date من 1 حتى 27 هكذا Date1 - Date2- Date3 وهكذا 

فبهذا السطر ستكون الليبلات وعناوينها عبارة عن تاريخ البداية مضاف اليه قيمة المتغير i  ولكن بتنسيق أسم اليوم (ddd) و رقم اليوم و / و رقم الشهر هكذا 1/10 

=================================================

K = K + 1
1 Next
2 End Sub

هذه الاسطر كالتالي 

1.  تزيد قيمة K  بمقدار واحد في كل حلقة تكرارية لا يكون فيها التاريخ يوم جمعة

2.  بداية حلقة تكرارية من جديد

3.  نهاية الكود

=====================

ان شاء الله أكون وفقت في الشرح والله أعلم

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information