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

التعبئة التلقائية للحقول بالايام والتاريخ لكل شهر


شامل2

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


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

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

كيف يمكن ملئ هذه الحقول بايام الاسبوع والتاريخ لشهر معين
يتم اختياره بدون يوم الجمعة من الشهر مثلا اذا كان لدينا الشهر تشرين الاول
يبدأ من الثلاثاء 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
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information