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

أخطاء تعريف المتغيرات


Hawiii

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

من الأخطاء الشائعة في المنتدى تعريف المتغيرات بصورة غير صحيحة في الـ VBA، مع أن هذه الطريقة صحيحة في بعض اللغات.

والخطأ هو صف مجموعة متغيرات في تعريف واحد ، وفي هذه الحالة سوف يتم تعريف المتغير الأخير فقط أما المتغيرات التي قبله سوف سوف يكون نوعها Variant
والصح هو تعريف كل متغير على حدى

مثال:

'الخطأ
Sub Test()
    Dim a, b As Double
    Dim rst1, rst2 As Recordset
  
    Debug.Print VarType(a)
    Debug.Print VarType(b)
  
    Debug.Print VarType(rst1)
    Debug.Print VarType(rst2)
End Sub


'الصح
Sub Test2()
    Dim a As Double, b As Double
    Dim rst1 As Recordset, rst2 As Recordset
  
    Debug.Print VarType(a)
    Debug.Print VarType(b)
  
    Debug.Print VarType(rst1)
    Debug.Print VarType(rst2)
End Sub


 

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

عند التجربه فقد اعطانى القيمه لنوع المتغير

وهذا جدول من ميكروسوفت لمعرفه نوع رقم المتغيرات

https://support.office.com/en-us/article/vartype-function-1e08636c-1892-40c2-aff3-2b894389e82d

وهذا رابط اخر

http://www.java2s.com/Code/VBA-Excel-Access-Word/Data-Type/ValuesreturnedbytheVarTypefunction.htm

وللحصول على اسم المتغير

Debug.Print TypeName(a)

بعتذر عن عدم وضع الكود فالتنسيق لسوء حاله الانترنت الان

وفى انتظار مزيد من الشرح @Hawiii جزاك الله خيرا :fff:

تقبلوا تحياتى وتمنياتى لكم وللجميع بالتوفيق

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

العفو منكم أنتم أساتذتنا
دالة TypeName جميلة وهي أسرع لمعرفة النوع من الرقم أو الرمز.
مع ملاحظة أني ذكرت أي متغير لا يتم تعريفه سيكون من نوع Variant ولكن عند التجربة سيعطيك Empty وكلاهما صح ولو أعطيته أي قيمة سوف يعطيك نوع مختلف عن الإثنين ، فالنوع Variant بمعنى متنوع يقبل أي قيم من أي نوع وسوف يعطيك Empty كذلك حتى لو عرفته بـ Variant في حال لم تعطه أي قيمة.

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

9 ساعات مضت, Hawiii said:

العفو منكم أنتم أساتذتنا
دالة TypeName جميلة وهي أسرع لمعرفة النوع من الرقم أو الرمز.
مع ملاحظة أني ذكرت أي متغير لا يتم تعريفه سيكون من نوع Variant ولكن عند التجربة سيعطيك Empty وكلاهما صح ولو أعطيته أي قيمة سوف يعطيك نوع مختلف عن الإثنين ، فالنوع Variant بمعنى متنوع يقبل أي قيم من أي نوع وسوف يعطيك Empty كذلك حتى لو عرفته بـ Variant في حال لم تعطه أي قيمة.

العفو منك اخى هاوى واسمح لى بمنادتك اخى @Hawiii انت الاستاذ انما انا مجرد هاوى وطالب علم مبتدىء

توكل على الله واكمل

:fff::signthankspin:

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

19 ساعات مضت, Hawiii said:

Dim rst1, rst2 As Recordset

سبحان الله ـ رُب ضارة ، نافعة !!

 

طبعا انت قصدك

Dim rst1, rst2 As ADODB.Recordset, rst3 As DAO.Recordset

.

انا اعرف انه ممكن ان نستعمل المعرف Variant للرقم او النص ،

ولكن الذي لم اكن اعرفه انه ممكن استعمال Variant مع Recordset !!

 

وبما انني استعملت الكود التالي ، واعطاني الاجابة الصحيحة :

Dim rst1, rst2 As DAO.Recordset
    

 

هذا يجعلني اقارن Variant  بالـ Object في :

    Dim xlApp As Object  'Excel.Application
    Dim xlWB As Object   'Excel.Workbook

 

فإذا استعملنا Variant او Object ، فالكود يكون صحيح ، ونحصل على اجابة صحيحة ،

ولكننا لا نستطيع الاستفادة من Intellisense الكود في اعطائنا تكملة للكود (عند كتابة . او مسافة) 🙂

 

هذه معلومة جديدة لي ، شكرا اخوي الهاوي 🙂

 

جعفر

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

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