探讨:通过字符串参数动态调用过程

2024-05-22 15:17:49 浏览数 (3)

标签:VBA

我们知道,VBA的一个过程可以方便地调用另一个过程。然而,如果调用过程中涉及到传递参数,那就有点意思了。下面,探讨几种传递过程。

下面是一个带可选参数的示例过程:

代码语言:javascript复制
Sub my_sub(Optional par1 As Variant = "myself", Optional par2 As Variant = "excelperfect")
 MsgBox par1 & "," & par2
End Sub

我们使用下面的过程来调用my_sub过程:

代码语言:javascript复制
Sub test1()
 Application.Run "my_sub", "fan"
End Sub

运行良好。

再用下面的过程来试一试:

代码语言:javascript复制
Sub test2()
 Application.Run "'my_sub(3 5)'"
End Sub

也运行良好。

然而,下面这个过程:

代码语言:javascript复制
Sub test3()
 Application.Run "'my_sub(3 5,5 6)'"
End Sub

就会触发运行时错误。

稍作修改:

代码语言:javascript复制
Sub test4()
 Application.Run "'my_sub'(3 5,5 6)"
End Sub

可以运行,但结果会出现两次。

修改成下面这样:

代码语言:javascript复制
Sub test5()
 Application.Run "'my_sub(3 5),(5 6)'"
End Sub

运行良好。

或者:

代码语言:javascript复制
Sub test6()
 Application.Run "'my_sub 3 5,5 6'"
End Sub

也可以运行。

下面再看看这个过程:

代码语言:javascript复制
Sub my_set_interior(r As Range, Optional lColor As Long = vbRed)
 r.Interior.Color = lColor
End Sub

使用下面的过程调用:

代码语言:javascript复制
Sub my_call()
 Application.Run "'my_set_interior(Selection),(vbGreen)'"
End Sub

会触发“运行时错误424:要求对象”。

使用下面的过程调用:

代码语言:javascript复制
Sub Calling_directly()
 my_set_interior Selection, vbGreen
End Sub

运行良好。

然而,给参数加上括号:

代码语言:javascript复制
Sub Calling_directly_with_parentheses()
 my_set_interior (Selection), (vbGreen)
End Sub

也会触发“运行时错误424:要求对象”。

使用Run方法:

代码语言:javascript复制
Sub Calling_with_quote()
 Application.Run "'my_set_interior Selection,vbGreen'"
End Sub

运行良好。

有兴趣的朋友,可以试试,加深对过程之间正确使用参数调用的理解。

0 人点赞