学习Excel技术,关注微信公众号:
excelperfect
在VBA中,我们可以在过程代码中使用Call语句来调用另一个过程。先来看两个示例。
示例1
代码如下:
Sub testCall()
Call MyProgram
End Sub
Sub MyProgram()
MsgBox "试验一下!"
End Sub
运行testCall过程,结果如下图1所示。
图1
示例2
也可以在调用其他过程时,向被调用的过程传递参数值,如下面的代码:
Sub testCallPassValue()
Dim str As String
str = ActiveCell.Parent.Name
Call MyPro(str)
End Sub
Sub MyPro(wks As String)
MsgBox "当前工作表是:" & wks
End Sub
运行testCallPassValue过程,结果如下图2所示。
图2
Call语句语法
Call语句的语法如下:
[Call] 过程名[参数]
其中:
Call可选,也就是说,Call可以省略。
参数,传递给被调用过程的用逗号分隔的参数。
说明:
若省略Call,则直接在代码中写上要调用的过程名,如上面的示例1所示。
如果被调用的过程含有参数,不省略Call,则应在过程名后使用括号传递参数,如上面的示例2所示。若省略Call,则调用过程中的代码可写为被调过程名加参数。上面示例2中相应的语句可改写为:
MyPro str
或者:
MyPro (str)
在调用其他过程时,使用Call语句是一个好习惯,这将使程序更易读。
参数传递测试
在《Excel VBA解读(121):Sub过程详解——枯燥的语法》中,我们详细讲解了Sub过程的完整语法。我们知道,Sub过程传递参数时,默认采用ByRef引用传递。下面来试试,代码如下:
Sub myPro()
Dim i As Integer
i = 1
Call yourPro(i)
MsgBox "i的值是: " & i
End Sub
Sub yourPro(num As Integer)
num = 5
End Sub
在myPro过程中,变量i的初始值是1,将其作为参数值传递给yourPro过程,执行完后,变量i的值变成了5,如下图3所示。
图3
运行结果表明,调用过程yourPro后,i的值被修改了。因此,使用ByRef传递参数时,在被调用过程中对参数值的修改,会影响到调用过程中的值。
注意,Sub过程默认采用ByRef传递参数,因此上述被调用过程中的参数语句等价于:
Sub yourPro(ByRef num As Integer)
num = 5
End Sub
如果将yourPro过程修改如下:
Sub yourPro(ByVal num As Integer)
num = 5
End Sub
运行myPro过程后的结果如下图4所示。
图4
调用过程中的变量值没有被修改,因为ByVal指定参数通过值传递,因此在被调用过程中对参数值的改变,不会影响调用过程的参数值。