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

مطلوب معرفة وجود دالة أو إجراء بالكود

مغلق
بدأه أبو هادي في 30 أبريل 2003 · 10 رد · 953 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أتصور السؤال واضح ، لقد توصلت إلى معرف وجود موديول بنفس طريقة معرفة الفورم باستخدام IsLoaded ولكن هذا سيعيق المبرمج من تغيير إسم الموديول كإجراء تنظيمي في حالة ما أراد إعادة تسميته .

أتصور أني لم أبدأ بشكل صح ، كان المفروض أن أبدأ بالمشكلة ، على كل حال المشكلة هي عدم استطاعتي تجنب توقف البرنامج في حالة استدعاء إجراء غير موجود بالبرنامج وهي مشكلة بالنسبة لي وكما أوضحت أعلاه أني تمكنت من فحص وجود الموديل الذي يضم الإجراء نفسه ولكنه غير مرضي بالنسبة لي .

المطلوب تجنب توقف البرنامج حتى بدون معرفة وجود الإجراء من عدمه

آمل منكم المساعدة ولكم جزيل الشكر سلفا .

تحياتي .

#2

جرب

Function FoundFunOrSub(FunOrSubName As String, FunOrSubKind As Byte) As Boolean

'  Function = 1

'  sub = 2

    Dim mdl As Module

    Dim KindStr As String

If FunOrSubKind = 1 Then KindStr = "Function " Else KindStr = "Sub "

    For I = 0 To Application.Modules.Count - 1

        Set mdl = Application.Modules(I)

        If InStr(1, mdl.Lines(1, mdl.CountOfLines), KindStr & FunOrSubName & Chr(40), 0) <> 0 Then

            FoundFunOrSub = True

            Exit For

        End If

    Next

End Function
#3

السلام عليكم

ما شاء الله تبارك الله ، دالة ممتازة ومفيدة جدا ، بارك الله فيك ورزقك الجنة .

وآسف على التأخير حيث كنت في رحلة عمل .

تحياتي .

#4

السلام عليكم

لم تحل المشكلة ولم يكن عيبا في دالة الأخ عصام جزاه الله خيرا ، ولكن الـ Debuging سوف يقف عند سطر استدعاء الدالة أو الإجراء حتى ولو تجنبنا استدعاءه باستخدام عبارة If مثل المثال الآتي :

  If Not FoundFunOrSub("LoadUmAlQura_Code", 2) Then

    Me.Ch3.Enabled = False

    NoUmAlQura = True

  Else

    Call LoadUmAlQura_Code

  End If

لذا فأن المشكلة لا زالت قائمة وتنتظر المساهمة من كل من له استطاعة .

تحياتي .

#5

طريقة تمشي مع الـ Function بس

Function FoundFunction(FunctionName As String) As Boolean

On Error GoTo TestZ_Err

FoundFunction = True

Dim dbs As Database

Dim rst As Recordset

Set dbs = Application.CurrentDb

Set rst = dbs.OpenRecordset("SELECT " & FunctionName & " AS Expr1;")

Set rst = Nothing

Set dbs = Nothing

Exit Function

TestZ_Err:

FoundFunction = False

If Err.Number <> 3085 And Err.Number <> 3141 Then MsgBox Err.Number & vbCrLf & Err.Description

End Function

Function Test1()

Dim InfunName As String

InfunName = InputBox("اكتب الدالة وقيمها")

If FoundFunction(InfunName) = True Then

    Dim dbs As Database

    Dim rst As Recordset

    Set dbs = Application.CurrentDb

    Set rst = dbs.OpenRecordset("SELECT " & InfunName & " AS Expr1;")

    rst.MoveFirst

    MsgBox rst!Expr1

Else

    MsgBox "الدالة أو القيم غير صحيحة"

End If

End Function

Function FunTest1(InByte As Byte, InString As String) As Variant

FunTest1 = "الرقم هو " & InByte & " والنص هو " & InString

End Function
#6

معليش على الرد السابق ، لانه تطويل من دون داعي وما قدرت احذفه

الحل ببساطة انه بعد ما نتاكد ان الدالة موجودة نستخدم

application.Run (procedure, [arg1], [arg2], ..., [arg30])

وما فيه مشكلة مع Debuging لأن procedure من نوع String

#7

هل يفيد استخدام هذه الطريقة مع تطبيق دالة الاخ أسامة الاولي :o

Private Sub Command0_Click()



x = FoundFunOrSub("Myweekday2", 1)



If x = True Then

MsgBox "the function exists"

Else

MsgBox "the function does not exist"

End If





End Sub
#8

السلام عليكم

بارك الله فيك أخ أسامة لقد حل الموضوع للدوال والإجراءات ولكن بقى شيء واحد وهو المتغيرات .

حاولت بالتحايل أن أعلن عن نفس المتغير العام Public داخل الإجراء ولكن أثر في النهاية على المتغير العام . ولم يستطع البرنامج التعامل معه في إعادة الإعلان عنه باستخدام Redim علما أن البرنامج لمن يمر على سطر الإعلان كما التالي :

  If NoUmAlQura Then

    Dim UmAll() As Variant

  End If

والمتغير العام معلن عنه في موديل أم القرى كالتالي :

  Type UmRec

    yy As Integer

    M2(0 To 12) As Integer

    GS As Long

  End Type

  Public UmAll() As UmRec

الأخ محمد شكرا على مشاركتك ولكن ما اقترحته هو نفس الحل السابق ولم يقم بحل المشكلة وكان المفترض أن تستدعي نفس الدالة بعد الـ Else ، وقد كان الإقتراح الأخير من الأخ أسامة هو الحل الصحيح .

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

تحياتي .

#9

السلام عليكم

أخي أسامة لقد انتهت المشكلة بفضل جهودكم وأشكركم عليها جزيل الشكر وقد تخلصت من استخدام المتغيرات العامة بعمل دوال ثم باستخدام حلكم الأخير معها .

شكرا لكم مرة أخرى ولأخي محمد على مشاركته معنا .

تحياتي .

#10

نتمنى ان تعم الفائدة

ما المقصود والغرض من هذا ويليت ترفق المثال النهائي لتعم الفائدة

بارك الله في الجميع

#11

السلام عليكم

الأخ أبووليد :

الجواب في هذه الوصلة :

http://www.arabteam2000.com/vb/showthread....&threadid=26797

وزيادة في التوضيح كل المقصود هو عدم إجبار المستفيد من النتيجة بحمل أي من الموديول معها . وكانت المشكلة تكمن في استدعاء دالة أو إجراء من ضمن موديول غير موجود أي أن الدالة غير موجودة والتي تتسبب في عدم إمكانية اقلاع البرنامج . وحل الأخ أسامة جزاه الله خير باستخدام Application.run استطعت أن أتفادى هذه المشكلة وأمكنني أن أتيح الفرصة لمن لا يحتاج إلى تقويم أم القرى أن يستغني عن حمل موديول أم القرى .

تحياتي .

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…