STFW
http://hi.baidu.com/yidilixing/blog/item/03acd63dac8b2601baa167a0.html
ByVal是把内存数值的拷贝给程序,所以改变的只是拷贝,内存原来的值是不会改变的。
ByRef是把内存地址告诉程序,所以改变的直接就是内存中的数值,VB中默认的参数传递方式是ByRef
ByVal :
表示该参数是按值方式传递的。 你在函数中修改此参数的值不会造成调用这个函数的函数的变量值的改变。
ByRef :
表示该参数按引用方式传递。 在函数中修改此参数的值会造成实参的值发生改变。
例如:
dim I as integer, J as integer
I = 1 : J = 2
call fun(I,J)
Msgbox "I=" & Cstr(i) & " J=" & cstr(J)
Function Fun(byref a, byval b)
a = 5
b = 6
fun = 0 '函数返回值
End Function
将会输出I=5 J=2,即I的值被函数Fun改变了。
就算你打错了搜索ByVar和ByRef也是能有结果的
http://bbs.blueidea.com/archiver/tid-1297568.html
ByVal 是按值传递,ByRef 是按址传递,按值传递只是把变量的值传递到过程或函数,如果在过程或函数内改变了参数的值,并不影响该变量;按址传递是把变量的地址传递到过程或函数,当在过程或函数内改变参数的值时,实际是改变了该地址的值,而传入的原始变量的值也是该地址的值,所以该变量的值也会跟着改变。
可以运行一下下面的程序,看看结果你就知道了。
如下:
Dim A As Integer
A = 10
Call AAA A
MsgBox A
A = 10
Call BBB A
MsgBox ASub AAA(ByVal V As Integer)
V = 20
End SubSub BBB(ByRef V As Integer)
V = 20
End Sub