ورود

View Full Version : خطای ByRef argument type mismatch در زمان ارسال پارامتر به زیربرنامه



pooya1072
دوشنبه 16 فروردین 1389, 07:36 صبح
با سلام
من به یه مشکل برخوردم که به نظرم یه کم عجیبه.
به کد زیر توجه کنید


Dim x, y As Integer

Private Sub Command2_Click()
Call Stext(x, y)
End Sub

Private Sub Stext(ByRef a As Integer,ByRef b As Integer)
a = 12
b = 22
Text3.Text = a
Text4.Text = b
End Sub

Private Sub Form_Load()
x = 5
y = 10
End Sub


وقتی اجراش میکنم پیغام خطای زیر رو میده:




:Compile error
ByRef argument type mismatch


حالا اگه فقط نوع پارامتر a رو از integer به variant تغییر بدم برنامه بدون مشکل اجرا میشه.از نوع پارامتر b هم ایرادی نمی گیره.متوجه نمیشم جریانش چیه؟؟؟؟

xxxxx_xxxxx
دوشنبه 16 فروردین 1389, 10:01 صبح
سلام،
دلیلش نحوه اشتباه تعریف متغیر هست!
همون خط اول در قسمت General که دو متغیر x و y رو تعریف کردید. در اون خط، متغیر y از نوع Integer است و x از نوع Variant. قبلاً یکی از کاربران به این نکته ظریف اشاره کرده بودند. منبع: http://barnamenevis.org/forum/showpost.php?p=600719&postcount=62

پس نحوه صحیح تعریف متغیر:


Dim x As Integer, y As Integer
در این دستورات شما پارامترها رو با ارجاع (ByRef) ارسال می کنید. در این حالت، یکسان بودن نوع پارامترها الزامیست. به همین خاطر شما اگر a رو از نوع Variant تعریف می کردید برنامه به درستی اجرا میشد. چون متغیر x که معادل همان a بود، از نوع Variant بود.

پ.ن: لطفاً برای تاپیکی که ایجاد می کنید عنوان مناسب انتخاب کنید. عنوان تاپیک اصلاح شد.