我记得有个东西印象很深:
如:
dim tmpname as string 
如果用byref去传的话,则会将string这一个结构类型都传过去了
如果用byval去传的话,则只将string类中的字串作为c形式的字符数组传过去所以api的宣称当中,如果需要传递字符串的地方,就得用byval而不能用byrefbyref常用于整体传递用type定义的类(结构体)。

解决方案 »

  1.   

    Dim y As Integer
    Private Sub Command1_Click()
    y = 6
    abc (y)
    Debug.Print y
    End SubSub abc( ByRef x As Integer)
    x = x * 2
    Debug.Print x
    End Sub====RESULT====
    x=12
    2
      

  2.   

    ByRef是按引用传递,ByVal是按值传递。简单的说就是如果按引用传递,接收者实际上是发送者的一个“引用”,只是引用而已,而不是一个复本,所以被传送的内容对于发送者和接收者来说是同一个,因此接收者对内容的更改就等于发送者所发送的内容实际上被更改;按值传递会在内存上建立一个独立于被传送内容的与被传送内容相同的单元,对被传送后的内容更改,是对新的单元更改,原内容不会被影响到。
      

  3.   

    byref传址,byval传值。
    VB参数缺省地使用Byref方式。
    试试下面这两段程序的区别:
    Dim y As Integer
    Private Sub Command1_Click()
    y = 6
    abc y
    Debug.Print y
    End SubSub abc(ByVal x As Integer)
    x = x * 2
    Debug.Print x
    End Sub----------------Dim y As Integer
    Private Sub Command1_Click()
    y = 6
    abc y
    Debug.Print y
    End SubSub abc( x As Integer)
    x = x * 2
    Debug.Print x
    End Sub
      

  4.   

    谢谢"一个好人"。 为什么 abc y 和abc(y)不一样呢??奇怪!!!!?
      

  5.   

    那能说说ABC(Y)T ABC Y 不加扩号怎么不一样呢?我真的不知道呀!!!??
      

  6.   

    老兄!拜托!我也不知道为什么不一样啦!不过我从来不直接用abc(y)这样的写法,除非是用call abc(y),你试试用call abc(y)和abc y的结果一样,就是abc(y)比较奇怪啦!