Cómo llamar a una función con variables (VBA Excel)

24/04/2007 - 12:11 por Don Juan | Informe spam
Hola grupo!
He creado una función en VBA para Excel de esta menra

Cargar_Valores("1") 'Y llamo a la función de abajo:

Function Cargar_Valores(ByVal Opcion1 as string)
Return 0
End Function

Pero me da error si llamo a dos parámetros, cómo se puede hacerlo?
El error me da aquí;

Cargar_Valores("1","ES") ' Cuando añado un segundo argumento me da
error, mismo si lo he declarado en mi función.

Function Cargar_Valores(ByVal Opcion1 as string,ByVal Pais1 as string)
Return 0
End Function

Muchas gracias!

Preguntas similare

Leer las respuestas

#1 marbarru
24/04/2007 - 15:07 | Informe spam
De esta forma creo yo las funciones con la cantidad de parametros
necesarios y sin ningun problema, inclusive existe la posibilidad de
crear parametros opciones.

Sub ProbarFuncion()
Dim Parametro1 As Double
Dim Parametro2 As Double
Parametro1 = 100
Parametro2 = 200
MsgBox Suma(Parametro1, Parametro2), vbInformation, "Resultado"
End Sub

Function Suma(ByVal pParametro1 As Double, ByVal pParametro2 As
Double) As Double
Dim varSuma As Double
varSuma = pParametro1 + pParametro2
Suma = varSuma
End Function

Saludos!

Marco Barboza - San Jose, Costa Rica

On Apr 24, 4:11 am, "Don Juan" wrote:
Hola grupo!
He creado una función en VBA para Excel de esta menra

Cargar_Valores("1") 'Y llamo a la función de abajo:

Function Cargar_Valores(ByVal Opcion1 as string)
Return 0
End Function

Pero me da error si llamo a dos parámetros, cómo se puede hacerlo?
El error me da aquí;

Cargar_Valores("1","ES") ' Cuando añado un segundo argumento me da
error, mismo si lo he declarado en mi función.

Function Cargar_Valores(ByVal Opcion1 as string,ByVal Pais1 as string)
Return 0
End Function

Muchas gracias!
Respuesta Responder a este mensaje
#2 Ivan
24/04/2007 - 17:30 | Informe spam
hola Juan (¿Don?)

no me hagas mucho caso, y si lo que voy a decirte esta equivocado
espero que alguien me corrija ( o que me corrijas)

en la primera funcion que expones no se lo que quieres evaluar/lograr,
pero creo que pongas lo que pongas como parametro siempre te devolvera
'0'. Y no precisamente por el uso de 'Return', cuyo uso no conozco mas
que asociado a 'GoSub' < salvo que se trate de una llamada a un
procedimiento 'propio' (en cuyo caso de todas formas creo que siempre
te devolveria lo mismo, sea lo que sea) >, sino porque no estas
creando una funcion que devuelva un resultado ni tampoco estas
manipulando ni condicionando nada dentro de ella en base al argumento
que le pasas. Realmente creo que esta expresion:

Valor = Cargar_Valores("1")

viene a ser mas o menos lo mismo que esta otra:

Valor = Nada

sin saber lo que buscas con la funcion una idea para comenzar podria
ser algo parecido a esto:

Function Cargar_Valores(ByVal Opcion1 as string) as long
if Opcion1 = "1" then
cargar_Valores = 0
else
' ...aqui otro valor
end if
End Function

en cuanto a tu segunda funcion, aunque no se por que en este caso te
da error y en el primero no, en definitiva creo que te valdria lo
anterior, se supone que si le pasas argumentos a una funcion es para
que haga una cosa u otra en funcion de cuales sean esos argumentos.
Tal y como tu las expones los argumentos no pintan/sirven nada/para
nada ( o al menos esa es mi impresion)

bueno espero te ayude en algo y, si quieres comentar mas detalles
quizas sea mas facil echarte una mano

igualmente si he dicho alguna burrada me encantaria me corrigieras/an

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Don Juan
25/04/2007 - 14:22 | Informe spam
Gracias por tu respuesta
De hecho, mi función no regresa valore, sólo ejecuta un código por medio de
parámetros.
No nocozco mucho de funciones en VBA. Por qué razón has declarado un
variable de tipo string y la función de tipo long?

Gracias!
"Ivan" wrote in message
news:

hola Juan (¿Don?)

no me hagas mucho caso, y si lo que voy a decirte esta equivocado
espero que alguien me corrija ( o que me corrijas)

en la primera funcion que expones no se lo que quieres evaluar/lograr,
pero creo que pongas lo que pongas como parametro siempre te devolvera
'0'. Y no precisamente por el uso de 'Return', cuyo uso no conozco mas
que asociado a 'GoSub' < salvo que se trate de una llamada a un
procedimiento 'propio' (en cuyo caso de todas formas creo que siempre
te devolveria lo mismo, sea lo que sea) >, sino porque no estas
creando una funcion que devuelva un resultado ni tampoco estas
manipulando ni condicionando nada dentro de ella en base al argumento
que le pasas. Realmente creo que esta expresion:

Valor = Cargar_Valores("1")

viene a ser mas o menos lo mismo que esta otra:

Valor = Nada

sin saber lo que buscas con la funcion una idea para comenzar podria
ser algo parecido a esto:

Function Cargar_Valores(ByVal Opcion1 as string) as long
if Opcion1 = "1" then
cargar_Valores = 0
else
' ...aqui otro valor
end if
End Function

en cuanto a tu segunda funcion, aunque no se por que en este caso te
da error y en el primero no, en definitiva creo que te valdria lo
anterior, se supone que si le pasas argumentos a una funcion es para
que haga una cosa u otra en funcion de cuales sean esos argumentos.
Tal y como tu las expones los argumentos no pintan/sirven nada/para
nada ( o al menos esa es mi impresion)

bueno espero te ayude en algo y, si quieres comentar mas detalles
quizas sea mas facil echarte una mano

igualmente si he dicho alguna burrada me encantaria me corrigieras/an

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#4 Ivan
25/04/2007 - 21:53 | Informe spam
hola Juan,

vaya por delante que lo que te diga tienes que cogerlo con pinzas y deberas
contrastarlo antes de hacerme caso del todo, pues mi nivel es mas bien bajo
(aun mas a nivel teorico), de todas formas te comento un poco en base a tu
consulta original (que por cierto reproduzco, pues hay un caos considerable
en el grupo y solo la veo en Internet, mientras que tu respuesta y la mia
solo las veo en el OE) lo que me dice el sentido comun (y si hay algo que no
veo, y estoy metiendo la pata, te/os agadecere.que me lo digas/ais)

.-lo 1º comentarte que, al menos para mi, sigue habiendo muchas dudas (por
no decir casi todas) sobre donde/cuando/que quieres hacer/que haga la
funcion
aqui te pongo algunas:

1º¿donde usas la funcion? ¿en una hoja?¿via codigo VBA?
2º¿a que te refieres con 'ejecuta un codigo por medio de
parametros'?¿quieres decir que 'Return' es un procedimiento/macro que
quieres que se ejecute cuando llamas a la funcion 'Cargar_Valores?
3º¿que quieres que haga con / (o dependiendo de el) el parametro que le
pasas?

paso a comentarte :

Por qué razón has declarado un variable de tipo string






la variable 'string' ya la declaras tu en la funcion original (ByVal Opcion1
as string) y se supone que es el argumento que le vas a pasar a la funcion
para que lo evalue y realice (o devuelva) una accion u otra, segun sea este
parametro. En cuanto a esto, lo normal es asignar un resultado al 'nombre'
de la funcion dentro de esta (pej: Cargar_Valores=Opcion1)

para que te hagas una idea y, por ejemplo para el caso de que lo que quieras
es llamar a la funcion como una funcion desde la hoja y que te ponga en ella
el parametro que le pasas (lo cual me da la impresion que no tiene ningun
sentido, pero tomalo como un ej.) podrias/¿deberias? hacer algo parecido a
esto:

Public Function Cargar(ByVal Dato As String)
Cargar = Dato
End Function

y pondrias en la celda = Cargar("Paris") esto te pondria Paris en dicha
celda. (Como te decia seria mas comodo haber puesto Paris directamente)

como veras lo que realmente esta haciendo la funcion es devolver un valor
(Paris), que en este caso es de tipo String (texto) y normalmente, cuando lo
que va a devolver queremos/sabemos que sea de un tipo de dato determinado se
declara +o- asi (para el ej. anterior que va a devolver un texto) :

Function Cargar(ByVal Dato As String) as String

asi te aseguras que el valor devuelto es del tipo correcto. Si esto se omite
( y aqui no estoy del todo seguro en el caso de las funciones, si asi para
la declaracion de variables) el valor devuelto es de tipo Variant, que
aunque es valido para (¿casi?) cualquier tipo y te evitaria un error por
tipo incorrecto en caso de no introducir/devolver uno adecuado, no solo deja
un poco al azar lo que te devuelva la funcion, pudiendo dar lugar a un error
posterior, sino que ademas ocupa bastante mas en memoria.

y la función de tipo long?





al hilo de lo que te acabo de comentar, en tu funcion crei entender que
querias que te devolviera '0' (cero), de ahi la asignacion del tipo long,
aunque dependiendo de los valores que pudiera devolver tambien podria
haberla declarado como Byte, Integer, Single, . tratandose de valores
numericos

como veras sin datos es bastante arriesgado especular. Pero vamos a segur un
poco mas:

para el caso de que lo que quieras es que se ejecute un procedimiento al
llamar a la funcion, tampoco le veo mucho sentido a tu plantea miento. Te
comento:

Function Cargar_Valores(ByVal Opcion1 as string)
Return 0
End Function

suponiendo que 'Return' es un procedimiento 'Sub' valido (sobre todo en el
caso de llamar a la funcion desde la hoja existen bastantes limitaciones),
siempre que llames a la funcion (o al menos siempre que la llames y el
argumento sea texto) se realizara exactamente la misma accion, da
exactamente igual (o al menos eso me parece) el argumento que le pases a la
funcion. Para esto, casi mejor llamar al procedimiento (o convertirlo a
funcion si es en la hoja) directamente, y si lo que hace dicho procedimiento
a nivel interno es coger el argumento pasado a la funcion, pues ponerselo a
el dierectamente como argumento, o llamarlo con algun condicional ( 'Si el
parametro es igual a 'tal' entonces 'cual')

lo que te quiero decir es que normalmente, cuando se le pasa un argumento a
una funcion o a un procedimiento es para algo. Bien para asignar el valor
pasado a una variable, a un objeto, a una propiedad, etc, bien para realizar
una accion u otra segun sea este argumento (pej. los de tipo Boolean, si es
verdadero tal si es falso cual)), bien una operacion aritmetica, etc. A
continuacion te pongo un par de ejemplos de funciones por si quieres hacer
alguna prueba:


'COpia desde aqui y pegalo en un modulo 'normal' de vba-
' ***para Funcion "UsarCodigos"***********************
' prueba a llamar a la funcion 'UsarCodigos' desde una celda
' puedes escribir directamente el argumento (=UsarCodigos(Verdadero)
' o poner una referencia de celda como argumento poniendo en esta
' Verdadero/Falso para probar ,pej. pon en 'A1' esto: =UsarCodigos(b1)
' y escribe verdadero o falso en 'b1'
'
Sub Mensaje_Falso()
MsgBox "El valor del argumento es Falso"
End Sub
Sub Mensaje_Verdadero()
MsgBox "El valor del argumento es Verdadero"
End Sub
Public Function UsarCodigos(ByVal bolPoner As Boolean)
If bolPoner Then Mensaje_Verdadero Else Mensaje_Falso
End Function
'
' ***para funcion "SumarDoce"************************
'con esta haz lo mismo que con la anterior pero le tienes que pasar
' como argumento/Parametro un nro, bien directamente, bien via celda, ...
'
Public Function SumarDoce(ByVal Nro As Long) As Long
SumarDoce = Nro + 12
End Function
'***********************************************
'- copia hasta aqui--

bueno, disculpa el rollo y espero no haberte liado mas que ayudado, de todas
formas te recomiendo que utilices la ayuda en linea ( F1 desde el editor de
VBA), aunque al principio es u8n tanto engorrosa, poco a poco se le va
cogiendo el tranquillo

un saludo y hasta pronto
Ivan

Primera
consulta --

Hola grupo!

He creado una función en VBA para Excel de esta menra

Cargar_Valores("1") 'Y llamo a la función de abajo:


Function Cargar_Valores(ByVal Opcion1 as string)
Return 0
End Function


Pero me da error si llamo a dos parámetros, cómo se puede hacerlo?
El error me da aquí;


Cargar_Valores("1","ES") ' Cuando añado un segundo argumento me da
error, mismo si lo he declarado en mi función.


Function Cargar_Valores(ByVal Opcion1 as string,ByVal Pais1 as string)
Return 0
End Function


"Don Juan" escribió en el mensaje
news:
Gracias por tu respuesta
De hecho, mi función no regresa valore, sólo ejecuta un código por medio
de
parámetros.
No nocozco mucho de funciones en VBA. Por qué razón has declarado un
variable de tipo string y la función de tipo long?

Gracias!

"Ivan" wrote in message
news:

hola Juan (¿Don?)

no me hagas mucho caso, y si lo que voy a decirte esta equivocado
espero que alguien me corrija ( o que me corrijas)

en la primera funcion que expones no se lo que quieres evaluar/lograr,
pero creo que pongas lo que pongas como parametro siempre te devolvera
'0'. Y no precisamente por el uso de 'Return', cuyo uso no conozco mas
que asociado a 'GoSub' < salvo que se trate de una llamada a un
procedimiento 'propio' (en cuyo caso de todas formas creo que siempre
te devolveria lo mismo, sea lo que sea) >, sino porque no estas
creando una funcion que devuelva un resultado ni tampoco estas
manipulando ni condicionando nada dentro de ella en base al argumento
que le pasas. Realmente creo que esta expresion:

Valor = Cargar_Valores("1")

viene a ser mas o menos lo mismo que esta otra:

Valor = Nada

sin saber lo que buscas con la funcion una idea para comenzar podria
ser algo parecido a esto:

Function Cargar_Valores(ByVal Opcion1 as string) as long
if Opcion1 = "1" then
cargar_Valores = 0
else
' ...aqui otro valor
end if
End Function

en cuanto a tu segunda funcion, aunque no se por que en este caso te
da error y en el primero no, en definitiva creo que te valdria lo
anterior, se supone que si le pasas argumentos a una funcion es para
que haga una cosa u otra en funcion de cuales sean esos argumentos.
Tal y como tu las expones los argumentos no pintan/sirven nada/para
nada ( o al menos esa es mi impresion)

bueno espero te ayude en algo y, si quieres comentar mas detalles
quizas sea mas facil echarte una mano

igualmente si he dicho alguna burrada me encantaria me corrigieras/an

un saludo y hasta pronto
Ivan

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida