VB 变量、参数传递的基本知识:

ByRef 与 ByVal 传值的区别

传递方式:
    ByRef 表示该参数按实际地址传递,源数据可以被调用的函数修改。ByRef 是 Visual Basic 的缺省、默认选项。
    ByVal 可选的,表示该参数按值传递,源数据不会被调用的函数修改。

参数含义:
    ByRef 是传址,就是把变量的地址传送给函数,在函数的内部对参数的修改,实际上是对变量地址里的数据修改,所以当函数返回的时候,传进来的变量也是跟着改变的。
    传送参数内存的实际地址给被调用者。也就是说,栈中压入的是实际内容的地址。被调用者可以直接更改该地址中的内容。

    ByVal 是传值,顾名思义,就是把变量的数据传给函数,函数内部对其做任何处理都不会影响变量本身的值。
    传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是所传的值。

演示代码:
    Private Function TestByVal(ByVal Tmp1 As Long)
        Tmp1 = Tmp1 + 1
    End Function
   
    Private Function TestByRef(ByRef Tmp1 As Long)
        Tmp1 = Tmp1 + 1
    End Function
   
    Private Sub Form_Load()
        Dim Tmp As Long
        Tmp = 1
       
        TestByVal Tmp
        MsgBox Tmp
        '显示:Tmp 的值为 1。
       
        TestByRef Tmp
        MsgBox Tmp
        '显示:Tmp 的值为 2,因为 TestByRef 中的参数 Tmp1 为 ByRef。
        'ByRef 是按地址传递,因此在 TestByRef 中对 Tmp1 进行修改后,将会导致源参数 Tmp 的值也被修改。
    End Sub