مساعدة برمجية في برنامج الإكسل

قمت بعمل شبه فورم لإدخال وترحيل البيانات في ملف اكسل بإستخدام اكواد الفيجوال بيسيك، وهذه سكرين له:

أنا أريد أن أجعل صندوقي النص (تاريخ التسجيل - تاريخ الرد (الحل)) يكونان خاصين بإدخال تواريخ على الصيغة dd/mm/yyyy بدلًا من أن يكونا مربعي نص عاديين…

وهذا الكود البرمجي للأربعة أزرار (حفظ - بحث - تعديل - تفريغ):
Function Reset()

Application.ScreenUpdating = False

Combogender.Text = ""
Combogender.BackColor = vbWhite

ComboClass.Text = ""
ComboClass.BackColor = vbWhite


TextNum.Value = ""
TextNum.BackColor = vbWhite

txtdetails.Value = ""
txtdetails.BackColor = vbWhite

txtregdate.Value = ""
txtregdate.BackColor = vbWhite

txtenddate.Value = ""
txtenddate.BackColor = vbWhite

txtresolve.Value = ""
txtresolve.BackColor = vbWhite



OptYes.Value = False
OptNo.Value = False


Application.ScreenUpdating = True


End Function

Private Sub cmdEdit_Click()
Application.ScreenUpdating = False

Dim iCell As Long

iCell = Sheets(2).Range("L10")

    With ThisWorkbook.Sheets(2)


       .Range("B" & iCell).Value = Combogender.Text
       .Range("C" & iCell).Value = ComboClass.Text
       .Range("D" & iCell).Value = TextNum.Value
       .Range("E" & iCell).Value = txtdetails.Value
       .Range("F" & iCell).Value = txtregdate.Value
       .Range("G" & iCell).Value = txtenddate.Value
       .Range("H" & iCell).Value = txtresolve.Value
       .Range("I" & iCell).Value = IIf(OptYes.Value = True, "تم الحل", "لم يتم الحل")

    End With
    Call Reset

    Application.ScreenUpdating = True

End Sub

Private Sub cmdReset_Click()
Dim i As Integer

i = MsgBox("هل تريد إزالة وتفريغ البيانات من النموذج؟", vbQuestion + vbYesNo + vbDefaultButton2, "Form Reset")

If i = vbYes Then

    Call Reset

End If
End Sub

Private Sub cmdSave_Click()
Application.ScreenUpdating = False

Dim iRow As Long

iRow = Sheets(2).Range("A1048576").End(xlUp).Row + 1


    With ThisWorkbook.Sheets(2)
    
       .Range("A" & iRow).Value = iRow - 6
       .Range("B" & iRow).Value = Combogender.Text
       .Range("C" & iRow).Value = ComboClass.Text
       .Range("D" & iRow).Value = TextNum.Value
       .Range("E" & iRow).Value = txtdetails.Value
       .Range("F" & iRow).Value = txtregdate.Value
       .Range("G" & iRow).Value = txtenddate.Value
       .Range("H" & iRow).Value = txtresolve.Value
       .Range("I" & iRow).Value = IIf(OptYes.Value = True, "تم الحل", "لم يتم الحل")
       
    End With
    Call Reset


    Application.ScreenUpdating = True
End Sub

Private Sub cmdSearch_Click()
With ThisWorkbook.Sheets(2)
    
       .Range("K10").Value = TextNum.Value
       Dim iCell As Long
       iCell = .Range("L10").Value
       Combogender.Text = .Range("B" & iCell).Value
       ComboClass.Text = .Range("C" & iCell).Value
       txtdetails.Value = .Range("E" & iCell).Value
       txtregdate.Value = .Range("F" & iCell).Value
       txtenddate.Value = .Range("G" & iCell).Value
       txtresolve.Value = .Range("H" & iCell).Value
       OptYes.Value = .Range("M10").Value
       OptNo.Value = .Range("N10").Value
    End With

End Sub

فهل يمكن تحقيق ما أريده
وهذا الملف للمعاينة:
https://www.mediafire.com/file/bpnqfsoqo4iu5i9/%u0633%u062C%u0644_%u0627%u0644%u0634%u0643%u0627%u0648%u0649_(1).xlsm/file

1 Like

@DMZ @Rema @hacktap للمتابعة

1 Like

حاولت تعديل الكود و لكن لم يفلح.
هل لك ان تقول لي ان كنت قد حصلت على الكود جاهزاً ام انك صنعت وظائف الاستمارة بنفسك ؟
يمكننا ان نستفيد من القوائم المنسدلة في الاعلى (نوع الشكوى, تنصيف الشكوى) لتغير قيمة الحقول المطلوبة.

حصلت على الكود من هنا http://yaser.xyz/vb/showthread.php?p=226#post226 وقمت بالتعديل عليه

يمكننا ان نستفيد من القوائم المنسدلة في الاعلى (نوع الشكوى, تنصيف الشكوى) لتغير قيمة الحقول المطلوبة.

كيف ذلك؟

هناك بعض التعقيدات حين يتعلق الامر بأضافة التاريخ الى هذه الحقول.
من فضلك قل لي ما هي نسخة الاوفيس الخاصة بك؟ هل هي 32بت ام 64 ؟

أصدار الأوفيس عندي 64 بت

اخشى اننا غير قادرين على القيام بشيء تحت هذه الظروف.
لتطبيق الامر علينا تفعيل مكون Windows date control او date picker بواسطة VB SP6
و هذه الحزمة متوافقة مع نسخة ٣٢بت من حزمة اوفيس لسبب ما.
قضيت ٤ ساعات من الاختبارات على حاسوبي و لم ينفع الامر.
لنسمع من بقية الزملاء.

2 Likes

قضيت ٤ ساعات من الاختبارات على حاسوبي و لم ينفع الامر.

أنا أعتذر بشدة عن ذلك، وأشكرك جدًا أيضًا… لم يكن الأمر يستحق كل وقتك ذلك :disappointed_relieved:

1 Like

انا اعمل على الامر بمجرد ان اصل الى نتيجة سأشاركها معكم, سأقوم بحذف حزمة اوفيس الخاصة بي و اعيد تنصيبها ببنية 32بت و اختبر.
انا اواجه نفس المشكلة التي ذكرها @utx38 لا تظهر لي اداة اختيار التاريخ و لا اعرف لماذا.

2 Likes

هل تملك تحديث بخصوص هذا ؟ @DMZ
هل يمكنك اختبار الامر بأسرع وقت مع نسخة 32بت ؟

اسف على التاخر بالرد
اولاً اود ان اقول ان الامر نجح مع وجود نسخة 32بت.
بعبارة اخرى ان اداة اختيار الوقت ظهرت في القائمة المطلوبة

لجعل الحقول تقبل تاريخ بدلاً من نص اولاً ننقر على developer ثم design mode نقوم بأختيار الحقول و ازالتها عن طريق الضغط على مفتاح Delete

ثم ننقر على Insert و من insert ننقر على زر المزيد من الادوات

من القائمة نبحث عن اداة Microsoft date and time picker control و نختارها
image

نقوم برسم الحقول في الاماكن المخصصة

الان نعود الى وضع design mode و نقوم بالنقر على الحقل الاول ليظهر لنا اسمه المشفر

الان في ورقة العمل الثانية ننظر اي حرف يحمل حقل (تاريخ التسجيل) في ورقة العمل الخاصة بـ @mostafa403 يحمل الرقم F

نقوم بنسخ الرمز المشفر للحقل و نقوم بفتح visual basic عن طريق view code

نقوم بوضع الرمز المشفر للحقل و الذي هو DTPICKER1 في كل سطر يقابل حرف F مع مراعات الابقاء على كلمة Value

نقوم بتغير كل القيم التي تقابل F و هكذا.
يتم التعامل مع الحقل الاخر بنفس الطريقة.

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

4 Likes