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

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


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

السلام عليكم 

عملت دالة تقوم بجمع عددين في الفورم 

لكن ابي اعمل له شرط في حالة مربع النص يكون فارغ ابي مسج يظهر لكن عن طريق الدالة لا يعمل 

كيف استطيع التحكم في محتويات الفورم عن طريق الدوال في الموديول 

function.rar

رابط هذا التعليق
شارك

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

استخدم دالة NZ لتفادي الحقول الفارغة بتعويضها بصفر

Me.txt3 = m(Nz(Me.txt1, 0), Nz(Me.txt2, 0))

function.rar

تحياتي

رابط هذا التعليق
شارك

10 hours ago, محمد أبوعبدالله said:

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

استخدم دالة NZ لتفادي الحقول الفارغة بتعويضها بصفر



Me.txt3 = m(Nz(Me.txt1, 0), Nz(Me.txt2, 0))

function.rar 19.34 kB · 1 download

تحياتي

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

مثل دالة اف الشرطية 

SNAG-42052714011900.png

تم تعديل بواسطه نبراس كاظم
رابط هذا التعليق
شارك

1 hour ago, biskra said:

msgbox "انتبه يوجد حقل أو أكثر فارغ", vbOKOnly
Me.txt3 = m(Nz(Me.txt1, 0), Nz(Me.txt2, 0))

 

اول شي منور اخي العزيز

شوف الصورة ولاحظ المثالث المرفق 

قصدي هل بالامكان ان اعمل هذا المسج او دالة اف الشرطية في الفنكشن وليس في الفورم

رابط هذا التعليق
شارك

 

2 ساعات مضت, احمد الفلاحجي said:

Function m(x, y As Variant)

اذا لم تكتب نوع المتغير ، فتلقائيا يأخذه الاكسس على انه Variant ، لذا ، مافي داعي تكتب انه Variant 🙂

 

 

وبتوسع لما كتبه اخي احمد :

Function m(x, y) As Double

    If Len(x & "") = 0 Then
    
        MsgBox "Please enter a value for X"
  
    ElseIf Len(y & "") = 0 Then
        
        MsgBox "Please enter a value for Y"
    
    Else
        m = CDbl(x) + CDbl(y)
    End If
    
End Function

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

45 دقائق مضت, jjafferr said:

وبتوسع لما كتبه اخي احمد :

وما احلى التوسع اخى ومعلمنا العزيز جعفر

نعم صحيح ما ذكرت استاذى العزيز وتعلمت هذا الدرس يوم ذكرها الاخ هاوى ولكن زحمه الراس بتنسينى

جزاك الله خيرا اخى ومعلمى العزيز جعفر

رابط هذا التعليق
شارك

1 hour ago, jjafferr said:

 

اذا لم تكتب نوع المتغير ، فتلقائيا يأخذه الاكسس على انه Variant ، لذا ، مافي داعي تكتب انه Variant 🙂

 

 

وبتوسع لما كتبه اخي احمد :


Function m(x, y) As Double

    If Len(x & "") = 0 Then
    
        MsgBox "Please enter a value for X"
  
    ElseIf Len(y & "") = 0 Then
        
        MsgBox "Please enter a value for Y"
    
    Else
        m = CDbl(x) + CDbl(y)
    End If
    
End Function

 

جعفر

الدالة شغالة تمام اخي جعفر . بس في شغلة لماذا وضعنا دالة 

cdbl 

وافهم من حضرتك ان التعامل بالفكشن صعب وليس سهل ام انا مخطئ 

رابط هذا التعليق
شارك

18 ساعات مضت, نبراس كاظم said:

بس في شغلة لماذا وضعنا دالة 

cdbl 

لان المتغير X و Y عبارة عن Variant الشبية للنص String ، بينما انت تريد ان تجمع الرقمين ، فلابد من تحويلهم الى Double او Integer لتتم عملية الجمع بطريقة صحيحة ،

فهنا اخبرنا الكود: اعمل تغيير للمتغير X الى رقم: Convert to Double ، او cDbl 🙂

 

الطريقة المثلى للتعامل مع دوالنا الخاصة (سواء في النموذج او الوحدة النمطية) هي ، ارسال القيمة جاهزة اليها ، اي نضبط القيم قبل ارسالها للدالة ،

وفي حال موضوعك هو:

عند ارسال المعلومة:

    If Len(Me.txt1 & "") = 0 Then
    
        MsgBox "Please enter a value"
        Me.txt1.SetFocus
  
    ElseIf Len(Me.txt2 & "") = 0 Then
    
        MsgBox "Please enter a value"
        Me.txt2.SetFocus
    
    Else
        Me.txt3 = m(Nz(Me.txt1, 0), Nz(Me.txt2, 0))
    End If

.

فتصبح الدالة:

Function m(x As Double, y As Double) As Double

    m = x + y
    
End Function

.

 

ولكن لأنك قلت انك تريد الفحص في الفنكشن ، لهذا السبب شفت محاولات الشباب 🙂 :

في ١١‏/١‏/٢٠٢١ at 00:12, نبراس كاظم said:

كن ابي اعمل له شرط في حالة مربع النص يكون فارغ ابي مسج يظهر لكن عن طريق الدالة

..

.

.

18 ساعات مضت, نبراس كاظم said:

وافهم من حضرتك ان التعامل بالفكشن صعب وليس سهل ام انا مخطئ

من وين وصلتك هذه المعلومة ، فأنا لم اتكلم عنها لا من قريب ولا من بعيد !!

في الواقع ، لذة البرمجة هي في عمل الدوال والتي بها يتم اختصار العمل وعدم عمل تكرار للكود 🙂

 

جعفر

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

23 minutes ago, jjafferr said:

لان المتغير X و Y عبارة عن Variant الشبية للنص String ، بينما انت تريد ان تجمع الرقمين ، فلابد من تحويلهم الى Double او Integer لتتم عملية الجمع بطريقة صحيحة ،

فهنا اخبرنا الكود: اعمل تغيير للمتغير X الى رقم: Convert to Double ، او cDbl 🙂

 

الطريقة المثلى للتعامل مع دوالنا الخاصة (سواء في النموذج او الوحدة النمطية) هي ، ارسال القيمة جاهزة اليها ، اي نضبط القيم قبل ارسالها للدالة ،

وفي حال موضوعك هو:

عند ارسال المعلومة:


    If Len(Me.txt1 & "") = 0 Then
    
        MsgBox "Please enter a value"
        Me.txt1.SetFocus
  
    ElseIf Len(Me.txt2 & "") = 0 Then
    
        MsgBox "Please enter a value"
        Me.txt2.SetFocus
    
    Else
        Me.txt3 = m(Nz(Me.txt1, 0), Nz(Me.txt2, 0))
    End If

.

فتصبح الدالة:


Function m(x As Double, y As Double) As Double

    m = x + y
    
End Function

.

 

ولكن لأنك قلت انك تريد الفحص في الفنكشن ، لهذا السبب شفت محاولات الشباب 🙂 :

..

.

.

من وين وصلتك هذه المعلومة ، فأنا لم اتكلم عنها لا من قريب ولا من بعيد !!

في الواقع ، لذة البرمجة هي في عمل الدوال والتي بها يتم اختصار العمل وعدم عمل تكرار للكود 🙂

 

جعفر

قصدي لو عملنا المطلوب من النموذج حيكون الناتج بهذه الصيغة 

if isnull(trim(me.txt1.value) then

msgbox"enter number"

endif

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

رابط هذا التعليق
شارك

5 دقائق مضت, نبراس كاظم said:

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

 

خليني احاول اقنعك 🙂

 

اعمل هذه المعادلة البسيطة في النموذج على النقر على Click :

Me.txt3 = Me.txt1 + Me.txt2

والآن ، ادخل هذه القيم في الحقلين:

txt1 : 1

txt2 : 3.1

 

واخبرني اذا حصلت على النتيجة الصحيحة عند النقر على الزر 🙂

 

جعفر

رابط هذا التعليق
شارك

43 minutes ago, jjafferr said:

 

خليني احاول اقنعك 🙂

 

اعمل هذه المعادلة البسيطة في النموذج على النقر على Click :


Me.txt3 = Me.txt1 + Me.txt2

والآن ، ادخل هذه القيم في الحقلين:

txt1 : 1

txt2 : 3.1

 

واخبرني اذا حصلت على النتيجة الصحيحة عند النقر على الزر 🙂

 

جعفر

الناتج يكون 4.1 مع العلم ان القيمة فلوت 

رابط هذا التعليق
شارك

هل حصلت على هذه القيمة من النموذج؟

 

هذا ما حصلت عليه انا :

image.png.6c4aa98804227484f255b21876f9aab9.png

.

وهذه كانت المعادلة :

image.png.f298cc0e34358ace39c990840fc4342a.png

.

 

الخلاصة:

لأننا في النموذج لم نذكر نوع الحقول ، فأخذها كنص ، وجمعها كنص !!

لهذا السبب يجب ان نخبره نوع الحقل/المتغير علشان نحصل على الاجابة الصحيحة 🙂

 

جعفر

1325.function.accdb.zip

رابط هذا التعليق
شارك

1 hour ago, jjafferr said:

هل حصلت على هذه القيمة من النموذج؟

 

هذا ما حصلت عليه انا :

image.png.6c4aa98804227484f255b21876f9aab9.png

.

وهذه كانت المعادلة :

image.png.f298cc0e34358ace39c990840fc4342a.png

.

 

الخلاصة:

لأننا في النموذج لم نذكر نوع الحقول ، فأخذها كنص ، وجمعها كنص !!

لهذا السبب يجب ان نخبره نوع الحقل/المتغير علشان نحصل على الاجابة الصحيحة 🙂

 

جعفر

1325.function.accdb.zip 37.32 kB · 1 download

اتعبتك مع اخي العزيز الحين لو كان لدينا اكثر من مربع نص كيف حيمكنني التحكم به عن طريق الفنكشن 

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

SNAG-42052821551400.png

رابط هذا التعليق
شارك

1 ساعه مضت, نبراس كاظم said:

الناتج يكون 4.1 مع العلم ان القيمة فلوت 

لا زلت انتظر الجواب !!

 

 

36 دقائق مضت, نبراس كاظم said:

لو كان لدينا اكثر من مربع نص

هذا الرابط يفيدك

 

جعفر

رابط هذا التعليق
شارك

استاذ اعرف الطريقة من النموذج بس سؤالي واضح لو كان من الفنكشن كيف يحكون التحكم هل اعمل فنكشن خاصة بالجيك بوكس ام تدرج ضمن الفنكشن الخاصة بالجمع 

رابط هذا التعليق
شارك

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

فالاكسس يتعامل مع الحقل كتعامله مع Variant ، 

لهذا السبب يجب ان نخبر الاكسس بأن الحقل (سواء نوع الحقل في الجدول عبارة عن رقم ، او عن طريق تنسيق الحقل ونخبره بأنه رقم) ، او قيمة الحقل نغيرها الى رقم (ونستعمل دوال مثل: Val او Int  او cInt او cDbl ، مثل :

Val(X)
Int(X)
cInt(X)
cDbl(X)

.

والموضوع لا يتوقف على النموذج او الكود (سواء في النموذج او التقرير او الوحدة النمطية) ، وانما في الاستعلام والتقرير والماكرو ايضا.

 

جعفر

  • 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