الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول تشغيل الماكرو

مغلق
بدأه طلال في 30 أغسطس 2001 · 27 رد · 1,886 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأعضاء

السلام عليكم و رحمة الله وبركاته وبعد

لدي عمليات يقوم بها ماكرو لنفرض باسم ماكرو1 ويشتمل على تشغيل عدة استعلامات من تحديث و الحاق وحذف لعمليات حسابية

اريد ان لا يشتغل هذا الماكرة إلا مرة واحدة في العام فقط

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

ارجو ان يكون ما ذكرت واضح

مع جزيل الشكر على تعاونكم

طلال

#2

هذه طريقة لحفظ التاريخ في سجل وندوز أما إذا كنت تعمل بالبرنامج على أكثر من جهاز فيجب حفظ تاريخ التشغيل الأخير في جدول :

Public Function التأكد_من_التاريخ()

On Error Resume Next

Dim checkDate As Variant

checkDate = GetSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير")

If IsNull(checkDate) Or checkDate = "" Then ' لم يتم تشغيل الماكرو من قبل

DoCmd.RunMacro "اسم الماكرو"

Call SaveSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير", Date)

ElseIf DatePart("yyyy", Date) = DatePart("yyyy", checkDate) Then ' تم تشغيله قبل ذلك في نفس السنة

MsgBox "رسالة لقد تم تشغيل الماكرو قبل ذلك !!"

Exit Function

ElseIf DatePart("yyyy", Date) > DatePart("yyyy", checkDate) Then ' تم تشغيله في السنة الماضية

DoCmd.RunMacro "اسم الماكرو"

Call SaveSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير", Date)

End If

End Function

غير في الكود اسم البرنامج واسم الماكرو واسم النموذج والرسالة إذا رغبت في إظهار رسالة .

ولك تحياتي

#3

اخي ابو حمود

السلام عليكم و رحمة الله وبركاته وبعد

ارجو توضيح أكثر عن كيفية وضع الكود

و المقصود باسم النموذج و تاريخ التشغيل و أخر تشغيل

مع الشكر مسبقاً

#4

ضع الكود في وحدة نمطية عامة .

وإذا كنت سابقاً تستدعي الماكرو بزر أمر فاستبدل به الاستدعاء التالي :

=التأكد_من_التاريخ()

وأما اسم النموذج فهو اسم النموذج الذي تشغل الماكرو سابقاً منه .

وتاريخ التشغيل الأخير هو آخر تاريخ قمت بتشغيل الماكرو فيه .

أرجو أن تكون المسألة قد وضحت لك .

ولك تحياتي

#5

أخي ابو حمود

السلام عليكم و رحمة الله وبركاته وبعد

لقد نسخت الكودحسب رأيك

ولكن كيف عمليات التشغيل حيث انني عملت زر امر لتشغيل الماكرو

#6

افتح النموذج في وضع التصميم

انقر على الزر انقر على زر خصائص في شريط الأدوات

في حدث عند النقر اكتب

=التأكد_من_التاريخ()

فقط هذا هو المطلوب

اخبرني إذا عمل معك .

ولك تحياتي .

#7

أخي ابو حمود

السلام عليكم ورحمة الله وبركاته وبعد

جربت و كان ناجح جداً

ولكن يوجد ملاحظة

وهي بعد ان يتم تشغيل الماكرو للمرة الأولى في العام و عند التكرار يمنع تشغيل الماكرو اتمنى ان يحدث رسالة تنبيهية تطلب من المشغل ان يؤكد رغبته في تشغيل الماكرو على الرغم من تعديل البيانات و تكرار ذلك

لان الذي حدث في الكود الأول ان نبه برسالة على اسبقية تشغيل الماكرو و لكن لم يقم بتشغيلة مرة أخرة و لم يعطي خيار للمشغل لكي يختار لأنه قد يتعمد التغيير في البيانات

ارجو ان يكون ما ذكرته واضح

طلال

#8

ما ذكرته واضح وكان الأفضل أن تطلبه من البداية .

اليك الإجابة :

Public Function التأكد_من_التاريخ()

On Error Resume Next

Dim checkDate As Variant

checkDate = GetSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير")

If IsNull(checkDate) Or checkDate = "" Then ' لم يتم تشغيل الماكرو من قبل

تحديث_التاريخ

ElseIf DatePart("yyyy", Date) = DatePart("yyyy", checkDate) Then ' تم تشغيله قبل ذلك في نفس السنة

If MsgBox("لقد تم تشغيل الماكرو قبل ذلك في هذه السنة ." _

& vbCrLf & "تاريخ التشغيل هو :" & Format(checkDate, "dd MMMM, yyyy") _

& vbCrLf & vbCrLf & "هل ترغب في إعادة تشغيله مرة أخرى ؟" _

& vbCrLf & vbCrLf & "انقر نعم لتشغيله أو إلغاء الأمر للتراجع .", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading + vbOKCancel _

, "تكرار التشغيل") = vbOK Then تحديث_التاريخ

ElseIf DatePart("yyyy", Date) > DatePart("yyyy", checkDate) Then ' تم تشغيله في السنة الماضية

تحديث_التاريخ

End If

End Function

Private Sub تحديث_التاريخ()

'DoCmd.RunMacro "اسم الماكرو"

Call SaveSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير", Date)

End Sub

ولك تحياتي

#9

أخي ابو حمود

السلام عليكم ورحمة الله وبركاته

اشكرك من اعماق قلبي على هذه الخدمة اللميزة منكم مما يدل على قدرات عالية في البرمجة نسأل الله العلي القدير أن يجزيك خيراً على ما قدمت و ما تحرص على تقديمه

ارجو التواصل المستمر في هذا المنتدى

و اشكر جميع القائمين عليه على ما يقدمون من جهد لنشر مثل هذه الأمور التي تعود على المجتمع بالفائدة بدلاً من النقاشات السيئه التي لا تعود للفرد و لا للمجتمع بالفائدة

طلال

#10

الأخ ابو حمود

السلام عليكم ورحمة الله وبركاته وبعد

اشكرك على التجاوب مقدما

والفكرة واضحة لديك و لله الحمد

ولكن عند تشغيل الماكرو لا يشتغل عن طريق هذا الكود فارجو الاطلاع و مساعدتي في التصحيح و قد اكون انا الذي على خطأ فارجو التصحيح

طلال

#11

يجب تغيير اسم الماكرو الذي وضعته أنا بأسم الماكرو لديك .

لاحظ أن أول مرة في التشغيل لا يظهر شيء وأما بعد ذلك فتظهر لك رسالة Msgbox عن تخيير المستخدم بين تكرار التشغيل مرة أخرى .

وإذا لم يشتغل فهل تظهر رسالة أو شي .

أخبرني من أين تشغل هذا الكود .

ولك تحياتي

#12

أخي ابو حمود

قمت بتشغيل الماكرو كاسابق عن طريق وضع الكود في وحدة نمطية عامة

ثمعند خصائص زر تشغيل الماكرو عند الحدث نقر عملت الكود=التأكد_من_التاريخ()

وعند تشغيلة في نفس العام لا يعمل

وفي عام أخر يبدأ باعطى رسالة انه يت تكرار العملية التي سبق عملها بتاريخ

طلال

#13

الأخ طلال

لقد عملت تعليق أمام عبارة

'DoCmd.RunMacro "اسم الماكرو"

فإذا كنت لم تغير الألوان الافتراضية في محرر الفيوجل بيسك فستظهر هذه العبارة باللون الأخضر أزل الفاصلة العلوية في بداية السطر أو أنسخ السطر التالي :

DoCmd.RunMacro "اسم الماكرو"

وغير اسم الماكرو إلى الاسم الموجود لديك .

لقد عملت ذلك لأنني أثناء تجريب الكود لم أشغل أي ماكرو فقمت بتعطيله ونسيت أن أزيلها .

إذا كان هذا هو السبب فأخبرني .

ملاحظة إذا كان هذا هو السبب وقمت بتشغيله لأول مرة فستظهر الرسالة التي تسأل عن تكرار العمل ولو لم يشتغل الماكرو قبل ذلك حقيقة ، انقر موافق وسيعمل الماكرو بإذن الله .

واعتذر عن الخطأ إذا كان هذا هو السبب .

ولك تحياتي

#14

لقد حذفت الفاصلة وتغير فعلاً لون الخط إلى الأسود ولكن النتيجة كما هي لا يعمل الماكرو

طلال

#15

أخ طلال

انسخ لي الكود كاملاً هنا . بنفس الموجود لديك لا تغير شيء .

ولك تحياتي .

#16

أخي ابو حمود

الكود تم وضعه في النمطيه العامة كا التالي

Public Function التأكد_من_التاريخ()

On Error Resume Next

Dim checkDate As Variant

checkDate = GetSetting("ApplicationName", "نموذج3", "تاريخ_التشغيل_الأخير")

If IsNull(checkDate) Or checkDate = "" Then ' لم يتم تشغيل الماكرو من قبل

تحديث_التاريخ

ElseIf DatePart("yyyy", Date) = DatePart("yyyy", checkDate) Then ' تم تشغيله قبل ذلك في نفس السنة

If MsgBox("لقد تم تشغيل الماكرو قبل ذلك في هذه السنة ." _

& vbCrLf & "تاريخ التشغيل هو :" & Format(checkDate, "dd MMMM, yyyy") _

& vbCrLf & vbCrLf & "هل ترغب في إعادة تشغيله مرة أخرى ؟" _

& vbCrLf & vbCrLf & "انقر نعم لتشغيله أو إلغاء الأمر للتراجع .", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading + vbOKCancel _

, "تكرار التشغيل") = vbOK Then تحديث_التاريخ

ElseIf DatePart("yyyy", Date) > DatePart("yyyy", checkDate) Then ' تم تشغيله في السنة الماضية

تحديث_التاريخ

End If

End Function

Private Sub تحديث_التاريخ()

DoCmd.RunMacro "ماكرو5"

Call SaveSetting("ApplicationName", "اسم النموذج", "تاريخ_التشغيل_الأخير", Date)

End Sub

#17

أخي ابو طلال

لقد أخطأتَ في عدم تغيير كلمة اسم النموذج إلى نموذج3 في كلا العبارتين في عبارة الحفظ في السجل فأنت غيرت القراءة ولم تغير الحفظ فلو تركتهما كلاهما لاشتغل وإلا يجب عليك تعديل الاثنتين .

SaveSetting تحفظ قيمة معينة في سجل وندوز و GetSetting تقرأ القيمة .

انسخ الكود التالي بدلاً من إجراء تحديث_التاريخ() الموجود لديك .

Private Sub تحديث_التاريخ()

DoCmd.RunMacro "ماكرو5"

Call SaveSetting("ApplicationName", "نموذج3", "تاريخ_التشغيل_الأخير", Date)

End Sub

فائدة احفظ الكائنات في قاعدة البيانات بأسماء تدل على عملها بدلاً من الأسماء الافتراضية التي يزودنا بها الأكسس .

ولك تحياتي

#18

للأسف يا ابو حمود

لم يشتغل الماكرو ايضا بعد تعديل الذي ذكرت

طلال

#19

أخي طلال

اليك الكود كاملا

Public Function التأكد_من_التاريخ()

On Error Resume Next

Dim checkDate As Variant

checkDate = GetSetting("ApplicationName", "نموذج3", "تاريخ_التشغيل_الأخير")

If IsNull(checkDate) Or checkDate = "" Then ' لم يتم تشغيل الماكرو من قبل

تحديث_التاريخ

ElseIf DatePart("yyyy", Date) = DatePart("yyyy", checkDate) Then ' تم تشغيله قبل ذلك في نفس السنة

If MsgBox("لقد تم تشغيل الماكرو قبل ذلك في هذه السنة ." _

& vbCrLf & "تاريخ التشغيل هو :" & Format(checkDate, "dd MMMM, yyyy") _

& vbCrLf & vbCrLf & "هل ترغب في إعادة تشغيله مرة أخرى ؟" _

& vbCrLf & vbCrLf & "انقر نعم لتشغيله أو إلغاء الأمر للتراجع .", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading + vbOKCancel _

, "تكرار التشغيل") = vbOK Then تحديث_التاريخ

ElseIf DatePart("yyyy", Date) > DatePart("yyyy", checkDate) Then ' تم تشغيله في السنة الماضية

تحديث_التاريخ

End If

End Function

Private Sub تحديث_التاريخ()

DoCmd.RunMacro "ماكرو5"

Call SaveSetting("ApplicationName", "نموذج3", "تاريخ_التشغيل_الأخير", Date)

End Sub

وقد جربته وقد اشتغل وأعدت التجربة مرات واشتغل فلا أدري ما المشكلة عندك .

ولك تحياتي

#20

الأخ ابو حمود وفقك الله ورعاك في طاعته

السلام عليكم و رحمة الله وبركاته وبعد

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

قد يكون السبب عدم تشغيل الماكرو في بداية الكود

حيث عندما عملت مقارنة مع الكود الأول و الذي طبقته سابقا و عمل لاحظت انك كتبت العبارة التالية في بداية الكود الأول بينما الأخير لا توجد و هي

DoCmd.RunMacro "ماكرو5"

مع الشكر على سعة صدرك واستحمالك لنا و ارجو المعذرة

طلال

#21

أزل هذه العبارة من الكود وأخبرني ماذا يحصل :

On Error Resume Next

ولك تحياتي

#22

أخي ابو حمود

السلام عليكم ورحمة الله وبركاته وبعد

جربت ونفس المشكلة

طلال

#23

أرسل القاعدة فقط اترك الماكرو والنموذج الذي تشغل منه الدالة والوحدة النمطية التي فيها الدالة .

وهذا بريدي

H_H123@hotmail.com

ولك تحياتي .

#24

الأخ ابو حمود

السلام عليكم ورحمة الله وبركاته وبعد

تقصد القاعدة محتويه على الجداول فقط

#25

لا ما أبغى الجداول .

النموذج الذي تشغل الماكرو منه والماكرو والوحدة النمطية التي فيها الدالة فقط .

ولك تحياتي

هذا الموضوع مغلق.

مواضيع مشابهة