问题
单项选择题
设有以下两个过程:
Sub S1(a As Integer,b As Integer)
t=a
a=b
b=t
End Sub
Sub S2(ByVal a As Integer, ByVal b As Integer)
t=a
a=b
b=t
End Sub
下列说法中正确的是( )。
A.过程S1能实现两个变量值的交换,S2不能
B.过程S2能实现两个变量值的交换,S1不能
C.过程S1和S2都不能实现两个变量值的交换
D.过程S1和S2都能实现两个变量值的交换
答案
参考答案:A
解析: 在VBA的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用ByVal声明,说明此时参数为传值调用;若形参用ByRef声明,说明此时参数为传址调用,即形参的结果会传递给实参。本题中S1的过程为传址调用,所以S1中交换的两个形参会影响到实参,可以实现实参的交换。S2过程为传值调用,S2中交换的两个形参不会影响到实参,也就不能实现实参的交换。