اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

سؤال : هل يمكن تحويل كود يحدد مصدر كائن الى روتين عام ليعمل على اى كائن اخر


ابو جودي
إذهب إلى أفضل إجابة Solved by jjafferr,

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

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

اساتذتى الكرام

فى المرفق الاتى استخدم هذا الكود 

Me.txtxname.ControlSource = "=IIf([xname] Is Null, Null, " & "Replace([xname], """ & FindAsType & """, """ & strTagStart & FindAsType & strTagEnd & """))"

حيث أن txtxname   هو مربع نص غير منضم
ومصدر بيانات هذا المربع هو الحقل   xname

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

 

انا حاولت ان اكتب الروتين بهذا الشكل

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = "=IIf(strFieldName Is Null, Null, " & "Replace(strFieldName, """ & FindAsType & """, """ & strTagStart & FindAsType & strTagEnd & """))"
End Function

لاستدعاءه بتلك الطريقة
 

Me.txtxname.ControlSource = StrHighLight(xname, FindAsType)

سطر الكود يعمل عند استخدام مربع النص الحاص بالبحث ذو اللون الاصفر

 

 

ولكن لم تفلح

هل من مساعدة فى كتابة الروتين الذى يقول بنلك العملية ام انه لا يمكن تحقيق ذلك ؟!
 

Filter With More Condition.mdb

تم تعديل بواسطه ابا جودى
  • Like 1
رابط هذا التعليق
شارك

أهلا بك..

الوضع الطبيعي للشفرة بهذا الشكل..

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))
End Function

لكن لديك متغيرات ليست مدرجة ضمن الوظيفة! وليست ضمن محددات الوظيفة! هل هي متغيرات عامة؟ من أين تأخذ القيم؟

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

9 دقائق مضت, أبو إبراهيم الغامدي said:

أهلا بك..

الوضع الطبيعي للشفرة بهذا الشكل..


Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))
End Function

لكن لديك متغيرات ليست مدرجة ضمن الوظيفة! وليست ضمن محددات الوظيفة! هل هي متغيرات عامة؟ من أين تأخذ القيم؟

ما هى المتغيرات التى تقصدها استاذى

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

تم تعريفها مسبقا فى رأس صفحة الاكواد

Dim FindAsType As Variant
Const strDefTagStart = "<strong><font color=black>"
Const strTagStart = "<strong><font color=red>"
Const strTagEnd = "</font></strong>"

 

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

بص مبدئيا للتضح الفكرة 

المفروض عند فتح النموذج اثناء الكتابة فى المربع الاصفر يتم الفرز حسب ما تم كتابته وتميزه باللون الاحمر بالكود الاتى 

الكود المسؤل عن ذلك

Me.txtxname.ControlSource = "=IIf([xname] Is Null, Null, " & "Replace([xname], """ & FindAsType & """, """ & strTagStart & FindAsType & strTagEnd & """))"

 

000.jpg

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

أهلا بك.. 

أحسنت..

ضع الشفرة التالية في وحدة نمطية عامة 

Const strDefTagStart = "<strong><font color=black>"
Const strTagStart = "<strong><font color=red>"
Const strTagEnd = "</font></strong>"

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))
End Function

 

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

2 دقائق مضت, أبو إبراهيم الغامدي said:

أهلا بك.. 

أحسنت..

ضع الشفرة التالية في وحدة نمطية عامة 


Const strDefTagStart = "<strong><font color=black>"
Const strTagStart = "<strong><font color=red>"
Const strTagEnd = "</font></strong>"

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))
End Function

 

هناك حطأ

وح

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = "=IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))"
End Function

اولت التعديل كالاتى دون فائدة 

 

000.jpg

وهذا ناتج التجربة

        Me.txtxname.ControlSource = StrHighLight(xname, FindAsType)
        Debug.Print StrHighLight(xname, FindAsType)

ظهرت الطباعة من خلال امر  Debug.Print

=IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ))

 

المفروض تكون

=IIf([xname] Is Null, Null, Replace([xname], "م", "<strong><font color=red>م</font></strong>"))

 

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

أهلا بك..

أعتذر عن هذا الخطأ بسبب العجلة

Const strDefTagStart = "<strong><font color=black>"
Const strTagStart = "<strong><font color=red>"
Const strTagEnd = "</font></strong>"

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = IIf(Len(strFieldName), Replace(strFieldName, FindAsType , strTagStart & FindAsType & strTagEnd ),strFieldName)
End Function

 

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

----------

عندما كتبت الروتين بهذا الشكل 

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  StrHighLight = " IIf(strFieldName Is Null, Null, " & "Replace(strFieldName, """ & FindAsType & """, """ & strTagStart & FindAsType & strTagEnd & """))"
End Function

وقمت باستدعاءه وتجربة طباعة النتيجة من خلال   خلال امر  Debug.Print
 

        Me.txtxname.ControlSource = StrHighLight(xname, FindAsType)
        Debug.Print StrHighLight(xname, FindAsType)

كانت النتيجة

 IIf(strFieldName Is Null, Null, Replace(strFieldName, "م", "<strong><font color=red>م</font></strong>"))

والنتيجة التى نريد الوصول اليها يجب ان تكون 

=IIf([xname] Is Null, Null, Replace([xname], "م", "<strong><font color=red>م</font></strong>"))

المشكلة هنا انه لم يقم باستبدال المتغير الذى يدل على اسم الحقل strFieldName بــــ   [xname] بل وضع المتغير باسمه كما هو بدلا من الحقل المفروض تمرير اسه للمتغير

اعتذر ان لم استطع توضيح الامر

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

فكرت اكتب الروتين بهذا الشكل 

 
Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  Dim x As String
  x = "[" & strFieldName & "]"
  StrHighLight = " IIf(x Is Null, Null, " & "Replace(x, """ & FindAsType & """, """ & strTagStart & FindAsType & strTagEnd & """))"
End Function

وتجربة طباعة النتيجة من خلال   خلال امر  Debug.Print

 IIf(x Is Null, Null, Replace(x, "م", "<strong><font color=red>م</font></strong>"))

 

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

22 دقائق مضت, ابا جودى said:

المشكلة هنا انه لم يقم باستبدال المتغير الذى يدل على اسم الحقل strFieldName بــــ   [xname] بل وضع المتغير باسمه كما هو بدلا من الحقل المفروض تمرير اسه للمتغير

لماذا تضع علامات التنصيص😬

على العموم هذه الطريقة مطروقة من قبل..  ولي مشاركة بهذا الخصوص

 

أهلا أبا جود..

سوف أعود إلى المرفق وأقوم بالطبيق عليه ورفعه.. انتظرني بعض الوقت..

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

  • أفضل إجابة

وهذه تجربتي

 


Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  
    Dim myStr As String

    myStr = "=IIf([xname] Is Null, '', " & "Replace([" & strFieldName & "], '" & FindAsType & "', '" & strTagStart & FindAsType & strTagEnd & "'))"
    'Debug.Print myStr
    StrHighLight = myStr

End Function



ونناديها
Me.txtxname.ControlSource = StrHighLight("xname", FindAsType)

 

جعفر

وتعديل نهائي


Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  
    Dim myStr As String

    myStr = "=IIf([" & strFieldName & "] Is Null, '', " & "Replace([" & strFieldName & "], '" & FindAsType & "', '" & strTagStart & FindAsType & strTagEnd & "'))"
    'Debug.Print myStr
    StrHighLight = myStr

End Function

 

جعفر

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

يا الهى  يعنى المشكلة كانت  [" & strFieldName & "]  بدلا  من  strFieldName   😂

الان تمت التجربة وكله تمام

Public Function StrHighLight(ByVal strFieldName As String, ByVal FindAsType) As String
  Const strTagStart = "<strong><font color=red>"
  Const strTagEnd = "</font></strong>"
  StrHighLight = "=IIf([" & strFieldName & "] Is Null, '', " & "Replace([" & strFieldName & "], '" & FindAsType & "', '" & strTagStart & FindAsType & strTagEnd & "'))"
End Function

وننادى عليه

Me.txtxname.ControlSource = StrHighLight("xname", FindAsType)

 

 

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

في الواقع المشكلة كانت اني ابحث عن متغير (نفس الشيء كان مع اخوي ابوابراهيم) ، بينما المطلوب كان كتابة الاسم ،

وهذا هو الفرق بين :

20 دقائق مضت, ابا جودى said:

يا الهى  يعنى المشكلة كانت  [" & strFieldName & "]  بدلا  من  strFieldName   😂

 

 

واللي ساعدني على الحل هو طباعة المتغير ، ورؤيته كما يراه الكمبيوتر ، والتعديل عليه حسب الحاجة ، بهذه الطريقة:

    myStr = "=IIf([" & strFieldName & "] Is Null, '', " & "Replace([" & strFieldName & "], '" & FindAsType & "', '" & strTagStart & FindAsType & strTagEnd & "'))"
    'Debug.Print myStr

 

جعفر

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

رغم أن الكلمات تحتار أين تقف في مسرح الأحرف لتنظم من نفسها أجمل العبارات ..لأهديها لكم
فمشاعرى هي كلماتى المسطورة وكلماتى هي دليل قلبى وقلبى نبضاته تقول لكم 
مليون الف شكر  ( أساتذتى العظماء ومعلمينى الأجلاء ( الأستاذ  @أبو إبراهيم الغامدي :fff:    و   الأستاذ  @jjafferr :fff: ) أنتم وكل أساتذتى الكرام
ولو أنى أجد عبارت الشكر تخجل منكم فهى أقل من أن توفيكم حقكم وقدركم

رأيـــت الحـق حـق المـعـلـم وأوجبة حفظاً على كل مسلـم
له الحق أن يهدي إليه كرامة لتعليم حرف واحــد ألف درهم

شموع كثيرة تحترق ...لتنير دروب الآخرين عطاء وآمالا ...
وتضحيات شتى تنثر ..من أجل الوصول للأسمى ...ومعكم حققنا ولمسنا كل معاني الجمال

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

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

01_jpg_16ebb9b166abaca094c7644fa710b606.jpg.d6f520cccf86dc5f9df1851e95ef7c2b.jpg

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

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

اخوي @أبو إبراهيم الغامدي صرنا فوق النخل من كثر ما دلعنا اباجودي 🙂

 

اخوي اباجودي ، شكرا لجميل كلماتك 🙂

 

جعفر

العفو منكم استاذى والله مهما قدمت سأظل فى حقكم مقصرا

انتم الحلو الذى الذى يزيل مرارة جهلنا والنور الذى ينير ظلمة جهلنا .. انتم سعادة الحياة بالنسبة لنا ادامكم الله فوق رؤسنا وملئ حياتكم سرورا وفرحا وبهجة ورزفكم من حيث لا تحتسبون

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

2 دقائق مضت, sandanet said:

سبقتموني في الوصول الى الحل لكني وصلت لنفس نتيجة الاستاذ جعفر بالنهاية وهذا شرف كبير لي 😀

821562509_FilterWithMoreCondition.mdb 2.25 \u0645\u064a\u062c\u0627 \u0628\u0627\u064a\u062a · 0 downloads

ازيك يا استاذ اوس ......

والله لك وحشة عود احمد يا هلا والله ومليون هلا

بس لا تقول سبقوك وانت وصلت

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

طبعا امزح معكم استاذى الجليل ومعلمى القدير :fff:

كل الشكر والتقدير والعرفان لحضرتك و لكل من قدم المساعدة او حاول او حتى كانت فى نيته تقديم المساعدة
بارك الله لكم وبكم  احبكم فى الله :wub:

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

3 دقائق مضت, ابا جودى said:

والله لك وحشة عود احمد يا هلا والله ومليون هلا

بس لا تقول سبقوك وانت وصلت

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

طبعا امزح معكم استاذى الجليل ومعلمى القدير

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

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

كما انني قمت بتبسيط الدالة أكثر ^_^ انظر الى الكود في ملفي المرفق في التعليق السابق 

Untitled.png

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

طيب ، علشان جوابي يكون مميز ، ممكن برنامجك يشتغل بهذه الطريقة 🙂

لأنك اعلنت في راس الكود عن 
Dim FindAsType As String 
  

فكفاية استعمال
Public Function StrHighLight(ByVal strFieldName As String) As String
  
    
  وبالتالي مناداتها تكون
  Me.txtxname.ControlSource = StrHighLight("xname")

 

جعفر

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

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

طيب ، علشان جوابي يكون مميز ، ممكن برنامجك يشتغل بهذه الطريقة 🙂


لأنك اعلنت في راس الكود عن 
Dim FindAsType As String 
  

فكفاية استعمال
Public Function StrHighLight(ByVal strFieldName As String) As String
  
    
  وبالتالي مناداتها تكون
  Me.txtxname.ControlSource = StrHighLight("xname")

 

جعفر

شوف يا استاذ  @sandanet اهون اجابة مميزة اهون ومن غير مواقع اجنبى  :dance1:

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

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