De nuevo, paso por valor y referencia

Kinder Sorpresa
15 de Noviembre del 2003
A ver, ya me respondieron Juan y Sdemingo y me quedó bastante claro, y llevé a cabo la explicación con una funcion que devolvia un valor numérico. Y lo hacia bien, pasaba una variable y cambiaba de valor despues de ejecutar la función simplemente haciando: Suma Numero

Ejemplo:

Option Explicit
Dim Numero As Integer
----------------------------------------------------------------------
Function Suma(N As Integer) As Integer
N = N + 1
Suma = N
End Function
----------------------------------------------------------------------
Private Sub Form_Click()
Suma Numero
Me.Caption = Numero 'Numero ha cambiado
End Sub
----------------------------------------------------------------------
Private Sub Form_Load()
Numero = 0
End Sub
----------------------------------------------------------------------

Ahora lo hago con un string para que invierta una cadena, pero no hace lo que quiero, no se cambia el valor si hago lo mismo que con el anterior, sino que tengo que poner: Cadena = Invierte(Cadena)

Este es el ejemplo:

Option Explicit
Dim Cadena As String
----------------------------------------------------------------------
Function Invierte(ByRef C As String) As String
Dim I
Dim Cad As String
For I = Len(C) To 1 Step -1
Cad = Cad & Mid(C, I, 1)
Next I
Cambia = Cad
End Function
----------------------------------------------------------------------
Private Sub Form_Click()
Invierte Cadena
Me.Caption = Cadena 'Cadena sigue siendo "Hola"
End Sub
----------------------------------------------------------------------
Private Sub Form_Load()
Cadena = "Hola"
End Sub
----------------------------------------------------------------------

Si tengo que poner: Cadena = Invierte(Cadena), ¿para que sirve que pase variable por valor o por referencia? A mi lo que me interesa es poder poner, como con el de "Suma" lo siguiente:
'Call Invierte(Cadena)' o 'Invierte Cadena' (las comillas es para no liar) y que la variable Cadena, se cambie.

¿Es un lio? Perdon, pero es que no me aclaro del todo.

Muchas gracias de nuevo.

Baltasar
15 de Noviembre del 2003
El error lo has cometido tú, sin darte cuenta.

En el caso del numérico, la variable que llega a la función SUMA se llama N (dentro de esa función); en el caso del string, la variable se llama C en la zona de parámetros, pero luego no la usas (fíjate que has puesto "CAMBIA=CAD)
todo se arreglará si pones C = CAD en esa línea.

Saludos

Kinder Sorpresa
15 de Noviembre del 2003
¡¡MUCHAS GRACIAS!! Joder, no me habia dado cuenta. Me estaba rompiendo la cabeza de una manera...

Muchas gracias Baltasar.

Baltasar
15 de Noviembre del 2003
Tranquilo, ya estás cometiendo errores tontos: irán en aumento a medida que aprendas más, jeje.