PDA

View Full Version : سوال: صدا زدن تابع به وسیله متغیر ؟؟!



سپهر-111
شنبه 14 بهمن 1391, 17:01 عصر
سلام دوستان
نام تابعی که در یک متغیر وجود دارد حالا من میخواهم به وسیله همین نام که به صورت رشته در یک متغیر ذخیره شده است ان تابع را صدا بزنم ؟؟؟
با چه کدی میتونم همچین کاری را انجام بدم ؟؟؟
مانند مثال :


Option Explicit
Dim str As String



Private Sub Command1_Click()
str = "test"
Call str
End Sub


Public Sub test()

End Sub


سوال دوم: چطور میتونم وقتی داخل تابعی هستم نام اون تابع رو بدست بیارم ؟

ممنون میشم راهنمایی بفرمایید
باتشکر از دوستان

حمید محمودی
شنبه 14 بهمن 1391, 18:22 عصر
نام تابعی که در یک متغیر وجود دارد حالا من میخواهم به وسیله همین نام که به صورت رشته در یک متغیر ذخیره شده است ان تابع را صدا بزنم ؟؟؟
شما باید از CallByName بجای Call استفاده کنید؛ بصورت زیر : (البته arguments رو حذف کنید اگر در تابع شما وجود نداره تا با پیغام خطا روبرو نشید؛


Call CallByName(Me, str, VbMethod, Arguments)

سپهر-111
شنبه 14 بهمن 1391, 18:55 عصر
سلام ممنون دوست عزیز:تشویق:
یه سوال دیگه هم داشتم
سوال دوم: چطور میتونم وقتی داخل تابعی هستم نام اون تابع رو بدست بیارم ؟
باتشکر

سپهر-111
شنبه 14 بهمن 1391, 20:37 عصر
شما باید از CallByName بجای Call استفاده کنید؛ بصورت زیر : (البته arguments رو حذف کنید اگر در تابع شما وجود نداره تا با پیغام خطا روبرو نشید؛


Call CallByName(Me, str, VbMethod, Arguments)

با این روش فقط میتونم توی خود فرم یه تابع دیگه رو صدا بزنم

حالا که میخوام به وسیله این روش یه تابع رو در یک ماژول صدا بزنم نمیشه !
ارور میده:
Object dosent support this property or method

ممنون میشم دوستان کمک کنند

حمید محمودی
یک شنبه 15 بهمن 1391, 00:43 صبح
حالا که میخوام به وسیله این روش یه تابع رو در یک ماژول صدا بزنم نمیشهبه این صورت چطور؟


'class module named Module1

Public sub test()
msgbox "hi"
End sub

Public Function MyCallByName(pName As String, cType As VbCallType, ParamArray args() As Variant)

Dim a As Module1
Set a = New Module1

CallByName a, pName, cType, args()

Set a = Nothing

End Function

Sub Main()
MyCallByName("test",VbMethod)
End Sub

و روشی که در اینجا (http://stackoverflow.com/questions/609894) ذکر شده؛