可以通过Script Control来完成,假设在工程中有Form1 Form2两个窗体,在Form2中有以下过程: Public Function sub1(i As Integer, b As Integer) As Integer sub1 = i + b End FunctionPublic Function sub2() As Integer suub2 = 2 End FunctionPublic Function sub3() As Integer sub3 = 5 End Function在Form1中添加Script Control后可以通过以下代码: Dim shar As New Form2
iamxiang(真心微笑) ( ) 信誉:101 Blog 加为好友 2007-6-11 15:54:49 得分: 0 我现在是想通过一句程序call L 其中:L为变量,实现当l=“sub1”时, 调用call sub1() 当l=“sub2”时,调用call sub2() 当l=“sub3”时,调用call sub3() --------- 只要 SELECT CASE L CASE "SUB1":CALL SUB1 CASE "SUB2":CALL SUB2 CASE "SUB3":CALL SUB3 END SELECT 就好了. 代码越普通越正规,越"特别"越失败.初学者切忌此误区.
我上面的方法本着越普通越好的原则. 如果觉得函数多的情况下,SELECT CASE 写得行数多,看着笨,可以用下面方法(感觉有点水平的样子,可我觉得不好).Public Function Root(ByVal X As Single) Root = Sqr(X) End FunctionPublic Function Square(ByVal X As Single) Square = X * X End FunctionPublic Function Triple(ByVal X As Single) Triple = 3 * X End Function上面是三个函数了,也可以更多,也可以是过程. 下面函数可以根据一个字串变量参数来调用想调用的函数过程.Private Sub 调用我想调用的函数(theFuncName as String,需要传递的参数 AS STRING) me.Caption = Format$( CallByName(Me, theFuncName , VbMethod, 需要传递的参数)) End Sub
另外:再解释一下我的问题:比如我有一个窗体,里面有不同的过程,如: sub1,sub2,sub3现在,我希望利用一个变量L,l=re![执行过程].(re![执行过程]是表中的字段。re![执行过程]可以是"sub1"或者"sub2"或者"sub3" 程序里面: call L 开始写的时候l=sub(sub2,sub3)可能引起了调解,以为我是想要用回调过程,不好意思~ 请高手们再帮忙想想办法!!!
Private Sub Command1_Click() Dim L As String L = "sub1" CallByName Form1, L, VbMethod L = "sub2" CallByName Form1, L, VbMethod L = "sub3" CallByName Form1, L, VbMethod End SubPublic Sub sub1() Debug.Print Now, "Sub1" End Sub Public Sub sub2() Debug.Print Now, "Sub2" End Sub Public Sub sub3() Debug.Print Now, "Sub3" End Sub
我汗,我也在想用callbyname....被楼上先发了-_-!
你的sub1 sub2 sub3,这些方法带参数么?
谢谢yachong(蚜虫),这样调用单纯的无参数的过程是可以的! 再帮忙想想:比如现在我的l="file1_click()" file1_click()是指我的窗体上的一个菜单 再比如我的sub2(m as string)是带参数的 应该如何才能实现?谢谢啦~
我希望利用一个变量L,l=re![执行过程].(re![执行过程]是表中的字段。re![执行过程]可以是"sub1"或者"sub2"或者"sub3" 程序里面: call L ------------ 没看到..... 不过还是理解不了, 看来跟楼主没法沟通.
'form1:Private Sub file1_click() MsgBox "file1" End Sub Sub xxxx() file1_click End Sub Sub sub2(m As String) MsgBox m End Sub'form2Private Sub command1_click() Dim l As String l = "xxxx" CallByName Form1, l, VbMethod l = "sub2" CallByName Form1, l, VbMethod, Date - Rnd * 100 End Sub
什么叫“call L”?变量不能call的
楼主再解释一下吧
VB似乎不支持这么干
Public Function sub1(i As Integer, b As Integer) As Integer
sub1 = i + b
End FunctionPublic Function sub2() As Integer
suub2 = 2
End FunctionPublic Function sub3() As Integer
sub3 = 5
End Function在Form1中添加Script Control后可以通过以下代码:
Dim shar As New Form2
ScriptControl1.AddObject "sh", shar
ScriptControl1.AddCode "Function Main()" & _
" Main = sh.sub1(sh.sub2, sh.sub3)" & vbCrLf & "End Function" MsgBox "结果等于:" & ScriptControl1.Run("main"), , "运算结果"
获得sub1(sub2, sub3)的结果
http://disk.csdn.net/group/AppleVB/
查看下载,
其中:L为变量,
实现当l=“sub1”时, 调用call sub1()
当l=“sub2”时,调用call sub2()
当l=“sub3”时,调用call sub3()
不知道能不能实现啊???
不过我要求的是通过变量调用不同的过程~见上楼所讲!
我现在是想通过一句程序call L
其中:L为变量,实现当l=“sub1”时, 调用call sub1()
当l=“sub2”时,调用call sub2()
当l=“sub3”时,调用call sub3()
---------
只要
SELECT CASE L
CASE "SUB1":CALL SUB1
CASE "SUB2":CALL SUB2
CASE "SUB3":CALL SUB3
END SELECT
就好了. 代码越普通越正规,越"特别"越失败.初学者切忌此误区.
过程是写在字符串里面,可是改成过程之后就不支持了!提示,没有此方法~
你也可以自己调试一下!
如果觉得函数多的情况下,SELECT CASE 写得行数多,看着笨,可以用下面方法(感觉有点水平的样子,可我觉得不好).Public Function Root(ByVal X As Single)
Root = Sqr(X)
End FunctionPublic Function Square(ByVal X As Single)
Square = X * X
End FunctionPublic Function Triple(ByVal X As Single)
Triple = 3 * X
End Function上面是三个函数了,也可以更多,也可以是过程.
下面函数可以根据一个字串变量参数来调用想调用的函数过程.Private Sub 调用我想调用的函数(theFuncName as String,需要传递的参数 AS STRING)
me.Caption = Format$( CallByName(Me, theFuncName , VbMethod, 需要传递的参数))
End Sub
jiangsheng(蒋晟.Net[MVP]) 利用addressof的方法我试过了!
不过此方法只能调用dll中的函数,和我要的还是不一样~
能不能再想想办法,因为如果能够实现,那就可以用来实现智能程序了~
===============================================================
这个用VFP等解释执行的语言很容易实现,
要不干脆换一种语言好了
sub1,sub2,sub3现在,我希望利用一个变量L,l=re![执行过程].(re![执行过程]是表中的字段。re![执行过程]可以是"sub1"或者"sub2"或者"sub3"
程序里面:
call L
开始写的时候l=sub(sub2,sub3)可能引起了调解,以为我是想要用回调过程,不好意思~
请高手们再帮忙想想办法!!!
Dim L As String
L = "sub1"
CallByName Form1, L, VbMethod
L = "sub2"
CallByName Form1, L, VbMethod
L = "sub3"
CallByName Form1, L, VbMethod
End SubPublic Sub sub1()
Debug.Print Now, "Sub1"
End Sub
Public Sub sub2()
Debug.Print Now, "Sub2"
End Sub
Public Sub sub3()
Debug.Print Now, "Sub3"
End Sub
再帮忙想想:比如现在我的l="file1_click()"
file1_click()是指我的窗体上的一个菜单
再比如我的sub2(m as string)是带参数的
应该如何才能实现?谢谢啦~
object 必需的;变体型(对象)。函数将要执行的对象的名称。
procedurename 必需的;变体型(字符串)。一个包含该对象的属性名称或者方法名称的字符串表达式。
calltype 必需的;常数。一个 vbCallType 类型的常数,代表正在被调用的过程的类型。
arguments() 可选的:变体型(数组)。
说明CallByName 函数用于获取或者设置一个属性,或者在运行时使用一个字符串名称来调用一个方法。在下面的例子中,第一行使用 CallByName 来设置一个文本框的 MousePointer 属性,第二行得到 MousePointer 属性的值,第三行调用 Move 方法来移动文本框:CallByName Text1, "MousePointer", vbLet, vbCrosshair
Result = CallByName (Text1, "MousePointer", vbGet)
CallByName Text1, "Move", vbMethod, 100, 100
过程没有返回值,像你这样调用L=sub1(sub2,sub3),是不行的,因为sub2 sub3没有返回值,它们没法传给sub1值,如果 sub2 sub3是函数就可以了,因为函数一般应有返回值
程序里面:
call L
------------
没看到..... 不过还是理解不了, 看来跟楼主没法沟通.
MsgBox "file1"
End Sub
Sub xxxx()
file1_click
End Sub
Sub sub2(m As String)
MsgBox m
End Sub'form2Private Sub command1_click()
Dim l As String
l = "xxxx"
CallByName Form1, l, VbMethod
l = "sub2"
CallByName Form1, l, VbMethod, Date - Rnd * 100
End Sub