我定义了两个过程
Sub A
……
   a=1
   b=2
   c=3
   Call B(a,b,c)
……Sub B(ByVal a as Integer,ByRef b as Integer,ByRef c as Integer)
   b=5
   c=6
End Sub可为什么调用之后a,b,c的值仍然没变?什么地方调用有问题吗?

解决方案 »

  1.   

    可以的.
    全部用ByRef 就行
      

  2.   

    Private Sub a()
    Dim a As Integer, b As Integer, c As Integer
    a = 1
    b = 2
    c = 3
    Call bb(a, b, c)MsgBox a
    MsgBox b
    MsgBox c
    End Sub
       
    Private Sub bb(ByRef a As Integer, ByRef b As Integer, ByRef c As Integer)
       b = 5
       c = 6
       a = 4
    End SubPrivate Sub Command2_Click()
    a
    End Sub
      

  3.   

    有个问题,需要提醒的是,在多个函数调用时,最好不要使用三重以上的Byref。就是最好不要这样用:
    主函数
        函数1(byref ...)
    end函数1(byref ...)
        调用函数2()
    end
    函数2(byref...)
        调用函数3(byref...)
    end
    函数3(byref)
    end
      

  4.   

    1 变量名和函数名不得相互混淆
    2 调用者必须声明变量,这样才会创建实例Sub bb(ByVal a As Integer, ByRef b As Integer, ByRef c As Integer)
       b = 5
       c = 6
    End SubPrivate Sub Form_Click()
    Dim a As Integer, b As Integer, c As Integer '很重要
       a = 1
       b = 2
       c = 3
       Call bb(a, b, c)
       Debug.Print a, b, c
    End Sub