Para Juan (Var. por valor y referencia)

Kinder Sorpresa
14 de Noviembre del 2003
Hola, Juan, gracias por contestar y me ha servido de mucha ayuda aunque tengo una duda.

He llevado a cabo la explicacion que me diste y he hecho este codigo:

Option Explicit
------------------------------------------------------------------------
Function Suma(ByRef NuevoValor As Integer) As Integer
NuevoValor = NuevoValor + 2
End Function
------------------------------------------------------------------------
Private Sub Command1_Click()
Dim Valor As Integer
Valor = 2
Call Suma (Valor)
MsgBox Valor
End Sub
------------------------------------------------------------------------
A ver... He puesto en la funcion suma ByRef , pero ya se que no hace falta puesto que es el valor predeterminado de VB.
Si yo ejecuto ese codigo, despues de hacer la llamada Call el valor pasa a ser 4 y ya queda modificado.

Ahora mas preguntas:
- ¿Siempre ha de ser una Function?
- ¿Siempre hay que emplear Call?

Muchas gracias de nuevo.

sdemingo
14 de Noviembre del 2003
Hola,

una pequeña apreciación.

tu función Suma, la tienes declarada como Function que devuelve un Integer, pero realmente no devuelve nada.

Si hiciera esto:
Function Suma(ByRef NuevoValor As Integer) As Integer
NuevoValor = NuevoValor + 2
Suma = NuevoValor
End Function

Entonces si que tendría sentido que fuera una Function que devuelve un valor, y la llamada sería

Valor = Suma(Valor)

Respecto a tus dudas.
No ha de ser siempre una function, puede ser un Sub.

Y en cuanto al call, no lo tengo muy claro, creo que hay que ponerlo cuando llamas a una función que recibe parámetrso y no devuelve ninguno. Si no recibe parámetros no es necesario ponerlo.

Un saludo
sdemingo

Juan
14 de Noviembre del 2003
Bueno respondiendo a las preguntas (auque ya lo ha hecho sdemingo).

1- No, no tiene por que ser una Function, puede ser un Sub.

2- La palabra Call es opcional, aunque si no la pones,
en tu llamada debes quitar los paréntesis a los
parámetros.

O sea, tu código podria ser:

Private Sub Suma(ByRef NuevoValor As Integer)
NuevoValor = NuevoValor + 2
End Sub
------------------------------------------------------------------------
Private Sub Command1_Click()
Dim Valor As Integer
Valor = 2
Suma Valor
MsgBox Valor
End Sub