标签: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
运行良好。
有兴趣的朋友,可以试试,加深对过程之间正确使用参数调用的理解。