Una macro puede procesar datos procedentes de otra. Por ejemplo, en el siguiente par, la pri­mera 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 dupli­car es poniéndolo entre los paréntesis de la primera macro. En la segunda macro, la varia­ble 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.

La primera macro le pasa un valor a la segunda, que calcula el doble y muestra el resultado.
Cuando queremos que una macro le pase dos argumentos a otra aparecen los problemas.
Para llamar a una macro, pasándole dos argumentos, hay que usar la instrucción Call.