标签:VBA
我们知道,VBA的一个过程可以方便地调用另一个过程。然而,如果调用过程中涉及到传递参数,那就有点意思了。下面,探讨几种传递过程。
下面是一个带可选参数的示例过程:
Sub my_sub(Optional par1 As Variant = "myself", Optional par2 As Variant = "excelperfect")
MsgBox par1 & "," & par2
End Sub
我们使用下面的过程来调用my_sub过程:
Sub test1()
Application.Run "my_sub", "fan"
End Sub
运行良好。
再用下面的过程来试一试:
Sub test2()
Application.Run "'my_sub(3+5)'"
End Sub
也运行良好。
然而,下面这个过程:
Sub test3()
Application.Run "'my_sub(3+5,5+6)'"
End Sub
就会触发运行时错误。
稍作修改:
Sub test4()
Application.Run "'my_sub'(3+5,5+6)"
End Sub
可以运行,但结果会出现两次。
修改成下面这样:
Sub test5()
Application.Run "'my_sub(3+5),(5+6)'"
End Sub
运行良好。
或者:
Sub test6()
Application.Run "'my_sub 3+5,5+6'"
End Sub
也可以运行。
下面再看看这个过程:
Sub my_set_interior(r As Range, Optional lColor As Long = vbRed)
r.Interior.Color = lColor
End Sub
使用下面的过程调用:
Sub my_call()
Application.Run "'my_set_interior(Selection),(vbGreen)'"
End Sub
会触发“运行时错误424:要求对象”。
使用下面的过程调用:
Sub Calling_directly()
my_set_interior Selection, vbGreen
End Sub
运行良好。
然而,给参数加上括号:
Sub Calling_directly_with_parentheses()
my_set_interior (Selection), (vbGreen)
End Sub
也会触发“运行时错误424:要求对象”。
使用Run方法:
Sub Calling_with_quote()
Application.Run "'my_set_interior Selection,vbGreen'"
End Sub
运行良好。
有兴趣的朋友,可以试试,加深对过程之间正确使用参数调用的理解。