Sub a(ByRef m As Integer)   m = m + 2Debug.Print m
End Sub
Private Sub Form_Load()
Dim t As Integer
t = 4
a (t)
Debug.Print t
End Sub执行结果:
6 4
我从书上看到的ByRef属于传地址,那为什么在Form_Load过程中打印t是4呢?不是对地址指向变量加2了么?
谢谢各位大侠。

解决方案 »

  1.   

    那是因为你加了括号的关系,传入a函数里的是(t),而不是t的地址
      

  2.   

    Sub a(ByRef m As Integer) 
        m = m + 2 
        Debug.Print m 
    End Sub Private Sub Form_Load() 
        Dim t As Integer 
        t = 4 
        a t 
        Debug.Print t 
    End Sub 调用过程的两种常用写法是:
    call a(t)
    a t你写成了a (t),因为没有用call,这儿参数加上括号后变成了表达式,表达式是传值的,所以才有你问题的结果...
      

  3.   


    Private Sub Form_Load()
    Dim t As Integer
        t = 4
        a (t) '开始进入sub a过程,进行加运算,可是t还是t=4,改得只是m值。    Debug.Print t
    End Sub
    Sub a(ByRef m As Integer)    m = m + 2 '加运算。
        Debug.Print m
    End Sub