Llamada a funcion..

20/12/2004 - 08:38 por Iago | Informe spam
Hola, estoy creando una macro sencilla y no se porque ocurre esto...
Tengo mimacro( ) dentro de ella llamo a funcion1 (a, b, c) el caso es q yo
pensaba que cuando mandabas datos a una funcion, esa funcion operaba con
esos datos, pero sin modificar las variables de donde vienen. Pero resulta
que si me los modifica...

Sub mimacro ( )
dim a, b as integer
a=1
b = funcion1(a)
end sub

function funcion1(c) as integer
c=c+1
funcion1=c*2
end function

Despues de ejecutar esto, a = 2, b=4, c=2
como puedo hacer para q no se modifique a?

Muchas gracias.
Un saludo.
Iago.

Preguntas similare

Leer las respuestas

#1 KL
20/12/2004 - 10:03 | Informe spam
Iago,

c=c+1 - aqui es donde reaignas el valor a la variable a. Lo q tienes q hacer
es introducir una variable mas:

Sub mimacro()
Dim a, b As Integer
a = 1
b = funcion1(a)
End Sub

Function funcion1(c) As Integer
d = c + 1
funcion1 = d * 2
End Function

Saludos,
KL



"Iago" wrote in message
news:
Hola, estoy creando una macro sencilla y no se porque ocurre esto...
Tengo mimacro( ) dentro de ella llamo a funcion1 (a, b, c) el caso es q yo
pensaba que cuando mandabas datos a una funcion, esa funcion operaba con
esos datos, pero sin modificar las variables de donde vienen. Pero resulta
que si me los modifica...

Sub mimacro ( )
dim a, b as integer
a=1
b = funcion1(a)
end sub

function funcion1(c) as integer
c=c+1
funcion1=c*2
end function

Despues de ejecutar esto, a = 2, b=4, c=2
como puedo hacer para q no se modifique a?

Muchas gracias.
Un saludo.
Iago.

Respuesta Responder a este mensaje
#2 Fernando Arroyo
20/12/2004 - 10:14 | Informe spam
En tu código la variable a se le pasa a la función por referencia (es lo predeterminado en VBA), por lo que al modificarse su valor dentro de la función la variable a es también modificada.

Si utilizas ByRef en la declaración de la función la misma no modificará la variable A:

Function funcion1(ByVal c) As Integer

Un saludo.


Fernando Arroyo
MS MVP - Excel


"Iago" escribió en el mensaje news:
Hola, estoy creando una macro sencilla y no se porque ocurre esto...
Tengo mimacro( ) dentro de ella llamo a funcion1 (a, b, c) el caso es q yo
pensaba que cuando mandabas datos a una funcion, esa funcion operaba con
esos datos, pero sin modificar las variables de donde vienen. Pero resulta
que si me los modifica...

Sub mimacro ( )
dim a, b as integer
a=1
b = funcion1(a)
end sub

function funcion1(c) as integer
c=c+1
funcion1=c*2
end function

Despues de ejecutar esto, a = 2, b=4, c=2
como puedo hacer para q no se modifique a?

Muchas gracias.
Un saludo.
Iago.


Respuesta Responder a este mensaje
#3 Iago
20/12/2004 - 10:37 | Informe spam
Muchas gracias Fernando a eso me referia.
Gracias KL pero con lo de ByVal reduzco bastante las variables, y es como
tenia pensado.
Un saludo.
Iago.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida