AbuuAhmed قام بنشر يناير 19, 2023 قام بنشر يناير 19, 2023 من الجيد الاحتراز بفحص المدخلات والمتغيرات ولكن نحتاج أن نوظفها التوظيف الصحيح وأن نختصرها أحيانا لتقليل كتابتها في الإجراءات والدوال. فمثلا يمكن اختصار فحص الحقول/الصناديق التي قد تحتوي على قيمة Null كالتالي: من: IsNull([txtBox]) Or [txtBox] = "" Or Len([txtBox]) = 0 إلى: Trim(Nz([txtBox],"")) = "" أما استخدام Empty و Missing فتحتاج إلى عناية أكبر في معرفتها ومتى استخدامها، وهنا إجراء لفحص هذين النوعين كالتالي: Sub EmptyAndMissing(A As Byte, Optional D As String, Optional E As Variant) Dim B, C 'B not used C = 5 Debug.Print "IsEmpty", IsEmpty(B), IsEmpty(C), IsEmpty(D), IsEmpty(E) Debug.Print "IsMissing", IsMissing(B), IsMissing(C), IsMissing(D), IsMissing(E) Debug.Print "-------------------------------------------------------------" End Sub وهذا اجراء لمناداة الإجراء أعلاه: Sub EmptyAndMissingTest() Debug.Print , "B", "C", "D(Op)", "E(Op)" Debug.Print "-------------------------------------------------------------" Debug.Print "EmptyAndMissing(5):" Call EmptyAndMissing(5) Debug.Print "EmptyAndMissing(5, '5'):" Call EmptyAndMissing(5, "5") Debug.Print "EmptyAndMissing(5, , 5):" Call EmptyAndMissing(5, , 5) End Sub وهذه نتائج الاختبار: B C D(Op) E(Op) ------------------------------------------------------------- EmptyAndMissing(5): IsEmpty True False False False IsMissing False False False True ------------------------------------------------------------- EmptyAndMissing(5, '5'): IsEmpty True False False False IsMissing False False False True ------------------------------------------------------------- EmptyAndMissing(5, , 5): IsEmpty True False False False IsMissing False False False False ------------------------------------------------------------- موفقين. 1
Moosak قام بنشر يناير 19, 2023 قام بنشر يناير 19, 2023 (معدل) شكرا لك على التوضيح أستاذنا أبو أحمد 🙂 وأعتقد أننا نحتاج منك لتحليل للنتائج الأخيرة للمفاضلة بين الطرق التي ذكرتها 🙂 --------------------------- وفي ذات الموضوع .. وجدت في أحد المواقع دالة اسمها IsBlank وظيفتها فحص وجود البيانات من عدمه لجميع الأنواع، وأنا أستخدمها وتعمل معي بكفاءة عالية 🙂 : '----------------------------------------------------------------------------- ' True if the argument is Nothing, Null, Empty, Missing or an empty string . '----------------------------------------------------------------------------- Public Function IsBlank(arg As Variant) As Boolean Select Case VarType(arg) Case vbEmpty IsBlank = True Case vbNull IsBlank = True Case vbString IsBlank = (LenB(arg) = 0) Case vbObject IsBlank = (arg Is Nothing) Case Else IsBlank = IsMissing(arg) End Select End Function وتناديها بهذا الشكل : IsBlank(Me.UserNameTxt) ----------------------------------------مثال آخر If IsBlank(Me.CustomerReferenceTxt) Then MsgBox "Customer Reference cannot be left blank." End If المصدر تم تعديل يناير 19, 2023 بواسطه Moosak
AbuuAhmed قام بنشر يناير 19, 2023 الكاتب قام بنشر يناير 19, 2023 (معدل) كنت سأعدل على هذه المشاركة وبالخطأ أنشأت مشاركة جديدة تم تعديل يناير 19, 2023 بواسطه AbuuAhmed
AbuuAhmed قام بنشر يناير 19, 2023 الكاتب قام بنشر يناير 19, 2023 (معدل) 2 ساعات مضت, Moosak said: وأعتقد أننا نحتاج منك لتحليل للنتائج الأخيرة للمفاضلة بين الطرق التي ذكرتها 🙂 كتبت رد قبل هذا على أساس أن الدالة التي أتيبت بها Built-in function ، لذلك رأيت أن ردي أبدا غير مناسب 🙂 الدالة فكرتها ذكية وتختصر كتابة دوال الفحص ، ولكن لم أقم بتجربتها حتى الآن ، والإسم مشابه لدالة الإكسل حتى أني اعتقدت أنها تابعة لنسخة vba التابعة للإكسل. الليلة إن شاء الله أقوم بتجربتها وأرجع لكم. تم تعديل يناير 19, 2023 بواسطه AbuuAhmed
AbuuAhmed قام بنشر يناير 19, 2023 الكاتب قام بنشر يناير 19, 2023 9 ساعات مضت, Moosak said: وأعتقد أننا نحتاج منك لتحليل للنتائج الأخيرة للمفاضلة بين الطرق التي ذكرتها 🙂 لقد قمت باختبار الدالة بشكل مكثف ولم تخفق في كل محاولاتي ، وهي دالة أوصي بها بشدة وخصوصا أنها تحمي "الجميع الخبراء قبل المبتدئين" ولا تحتاج لمستخدمها من التعمق في معرفة كل أنواع دوال الفحص ودهاليزها. لقد قمت بإضافتها إلى موديول أدواتي لبرامجي وهي الثانية على ما أتذكر بعد إجراء mySendKeys. فقط ملاحظة واحدة، في الدالة تم استخدام دالة LenB بدلا من Len ولم أعرف هدف المبرمج فالأولى تعد الحروف والثانية تعد مساحة تخزينها بالبايت!.
jjafferr قام بنشر يناير 20, 2023 قام بنشر يناير 20, 2023 21 ساعات مضت, AbuuAhmed said: من: IsNull([txtBox]) Or [txtBox] = "" Or Len([txtBox]) = 0 إلى: Trim(Nz([txtBox],"")) = "" عمل جميل للتحقيق ، ولكن فعليا ، ما الدالة اللي وصلنا لها لعملنا اليومي ؟ انا استعمل بدل if IsNull([txtBox]) Or [txtBox] = "" Or Len([txtBox]) = 0 استعمل if Len([txtBox] & "") = 0 جعفر
AbuuAhmed قام بنشر يناير 20, 2023 الكاتب قام بنشر يناير 20, 2023 (معدل) 40 دقائق مضت, jjafferr said: ولكن فعليا ، ما الدالة اللي وصلنا لها لعملنا اليومي ؟ عزيزي ، من له حيلة فليحتال 🙂 سبق إني كتبت أن الفيجوال به "تساهل" كبير ، فقد يعتبرها البعض عيوبا وقد يعتبرها آخرون ميزة ومرونة وسهولة للمبرمجين. أنت في استعمالك تجمع قيمة نصية مع قيمة Null ، منطقيا فيها تعارض ولن تمررها لك كثير من اللغات ، ولكنها حل بديل لدالة Nz. يبقى مسألة الفراغات السابقة واللاحقة للنص فإذا أردت التخلص منها فتحتاج إلى استعمال دالة Trim أما إذا أردت التعامل معا وإبقاءها كجزء من النص فما تقوم به فيه الكفاية. بالنسبة لي سأستعمل دالة IsBlank قي برامجي الخاصة ، ولكن في الأمثلة للمنتدى فربما لا حتى لا أضطر أن أحمل معي موديول الأدوات. تم تعديل يناير 20, 2023 بواسطه AbuuAhmed 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.