Compartir a través de

Cómo usar parámetros, Visual Basic

Anónimas
2020-03-26T19:24:31+00:00

Buenas.

Tengo el siguiente código:

Function R_PARALELO(ParamArray Args2() As Variant) As Double

Dim sumInv As Double

For i = LBound(Args2) To UBound(Args2)

For Each elem In Args2(i)

sumInv = sumInv + 1 / elem

Next elem

Next i

R_PARALELO = 1 / sumInv

End Function

Uso la fórmula en una planilla.

Si la uso con celdas y rangos anda bien.

Por ejemplo, "=R_PARALELO(C1:C3;C5)"

Si la uso con el resultado de una función o una expresión me da error.

Por ejemplo, "=R_PARALELO(C1:C3;A2*B2)

Por algún motivo si pongo "A2*B2" me da error.

Mi consulta, entonces, es. Cómo puedo corregir este problema en el programa y porqué está sucediendo?

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

12 respuestas

Ordenar por: Muy útil
  1. Anónimas
    2020-03-28T01:07:30+00:00

    Otra forma puede ser la comentada por Héctor.

    Cuando Héctor dice «... o pedir ayuda al excel...», (creo que) se refiere a algo así:

    -  Para  "=R_PARALELO(C1:C3;A2*B2)"

    • Si (p.e.) en Z1 pones  =A2*B2
    • Puedes llamar a la UDF así: =R_PARALELO(C1:C3;Z1)

    La idea es no tener que recurrir a eso para que no se haga más engorroso el uso de la función en el futuro.

    De todas formas ya encontré una solución, como escribí en respuesta a Hector, en la que puedo trabajar con cualquier parámetro.

    Muchas Gracias de todas formas.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2020-03-27T17:16:41+00:00

    Paramarray se utiliza cuando no sabes cuantos parámetros necesitas. Creo entender que en tu caso, solo tienes dos parámetros.: el primero un rango y el segundo el valor de una celda o una cantidad.

    Cargas el rango en un array (que defines dentro de la función) . Con esto ya podrías resolverlo.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimas
    2020-03-27T17:03:33+00:00

    Otra forma puede ser la comentada por Héctor.

    Cuando Héctor dice «... o pedir ayuda al excel...», (creo que) se refiere a algo así:

    -  Para  "=R_PARALELO(C1:C3;A2*B2)"

    • Si (p.e.) en Z1 pones  =A2*B2
    • Puedes llamar a la UDF así: =R_PARALELO(C1:C3;Z1)

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimas
    2020-03-27T14:28:17+00:00

    ... Cómo puedo corregir este problema en el programa y porqué está sucediendo?

    cuando defines una UDF que puede tomar matrices de indeterminados argumentos, ParamArray le indica a la UDF que "espere" (una o más) matrices de (uno o más) elementos (cada una)

    PERO... cuando cambias

    de esto: =R_PARALELO(C1:C3;C5)

    _a esto: =R_PARALELO(C1:C3;A2*B2)

    el segundo argumento => A2*B2 <= NO ES un elemento (de ninguna matriz)...

    ES una expresión que tu código tiene que evaluar (o pedir ayuda al excel)

    lo interesante en este caso sería preguntarte algo +/- como esto:

    • que tipo de elementos pudiera (intentar) ingresar un usuario como argumentos de mi UDF ?

    Me ayuda a entender cuál es el problema. Pero aún no tengo la solución, en parte es debido a mi falta de conocimiento, lo sé.

    Entonces, cómo puedo tomar todos los argumentos que sean expresiones, constantes o resultados de aplicar otra función y tratarlos junto a los argumentos que si son matrices?

    Básicamente no sé qué instrucciones puedo usar, y tal vez cómo, para reconocer si es una u otra para poder hacer algo diferente en cada caso.----------------------------------------------------------------------------------------------------------------

    Edición 27/03/2020 12:11 Hora Argentina GMT - 3:

    Ya lo pude solucionar. Hallé la instrucción TypeName y me ayudó a reconocer qué tipo de dato es cada elemento de los argumentos. Suficiente para poder solucionar el problema por mi cuenta.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  5. Héctor Miguel 71,595 Puntos de reputación
    2020-03-27T04:18:28+00:00

    ... Cómo puedo corregir este problema en el programa y porqué está sucediendo?

    cuando defines una UDF que puede tomar matrices de indeterminados argumentos, ParamArray le indica a la UDF que "espere" (una o más) matrices de (uno o más) elementos (cada una)

    PERO... cuando cambias

    de esto: =R_PARALELO(C1:C3;C5)

    _a esto: =R_PARALELO(C1:C3;A2*B2)

    el segundo argumento => A2*B2 <= NO ES un elemento (de ninguna matriz)...

    ES una expresión que tu código tiene que evaluar (o pedir ayuda al excel)

    lo interesante en este caso sería preguntarte algo +/- como esto:

    • que tipo de elementos pudiera (intentar) ingresar un usuario como argumentos de mi UDF ?

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios