Una macro puede procesar datos procedentes de otra. Por ejemplo, en el siguiente par, la primera macro “le pasa” un valor a la segunda, que lo duplica y muestra el resultado:
Sub principal()
x = [A1]
doble (x)
End Sub
Sub doble(a)
b = 2 * a
MsgBox (“El doble de “ & a & “ es “ & b)
End Sub
La forma “natural” de pasar el valor por duplicar es poniéndolo entre los paréntesis de la primera macro. En la segunda macro, la variable que está entre paréntesis recibe el valor que le pasó la otra.
Como sugiere la pregunta, esto no funciona con dos o más argumentos. Si, dentro de una macro, invocamos otra con dos argumentos (por ejemplo, Suma(x, y)), obtenemos un mensaje de error.
Hay distintas soluciones, pero la más simple es invocar la segunda macro con la instrucción Call:
Sub principal()
x = [A1]
y = [A2]
Call suma(x, y)
End Sub
Sub suma(a, b)
c = a + b
MsgBox (“La suma es “ & c)
End Sub
Existen otras soluciones, pero esta funciona.