新建From1(窗体),新建Command1(按钮CommandButton),代码:
Private Sub Command5_Click()
Dim intA As Integer
intA = 0: Call s_1(intA): Debug.Print intA
intA = 0: Call s_2(intA): Debug.Print intA
intA = 0: Call s_3(intA): Debug.Print intA
End Sub
Private Sub s_1(intA As Integer) '等效于ByRef
intA = 1
End Sub
Private Sub s_2(ByRef intA As Integer)
intA = 2
End Sub
Private Sub s_3(ByVal intA As Integer)
intA = 3
End Sub
运行结果:
1
2
0
ByRef:(默认情况下,当省略传递类型时,默认值是 ByRef)传递变量时,将该变量的引用地址传入过程或函数。传入引用地址意味着,在过程或函数内部对其修改时,也会影响上一级过程(父过程)中的变量的值。
ByVal:传递变量时,复制一份该变量,传入过程或函数。在过程和函数内部对该变量进行修改,只对该副本有效,对上一级过程(父过程)的变量没有影响。
由于ByVal会产生副本,会新建存储空间,所以比ByRef和默认更占用资源。