Como hemos visto, las macros son programas escritos en el lenguaje VBA a los cuales se les llama procedimientos.
Cada procedimiento tiene la siguiente sintaxis:
Sub NombreProc()
End Sub
El nombre del procedimiento es NombreProc, que es el nombre que le ponemos o el nombre que ingresamos cuando se creó la macro desde el Excel. Al interior del procedimiento se inserta todas las instrucciones del mismo.
De manera que, como hemos visto, un procedimiento está contenido en un modulo. Y puede haber uno o más procedimientos como en el caso del Módulo3, contiene 6 procedimientos.
Estos procedimientos están precedidos por la palabra clave “Sub”, ya que son subprogramas, y como tal, debe haber un programa que deberá ser el programa principal, el cual en sí mismo también es un procedimiento.
Estos procedimientos pueden ser independientes uno de otro, como en el módulo3 o, pueden estar escritos de manera independiente pero, desde el procedimiento principal se les puede llamar para ser ejecutados en el orden que se desee.
Aquí es donde resulta útil los parámetros que deben tener estos procedimientos. En cada caso hemos usado ().
Al interior de estos paréntesis se debe ingresar los parámetros que deben llevar datos con los cuales el procedimiento se ejecutará o devolver resultados obtenidos en el procedimiento.
Desde este punto de vista, un procedimiento llama a otro para que se ejecute y le pasa (o no) datos y puede esperar recibir resultados. Los datos que se transfieren son simplemente nombres de variables numéricas o de texto y pueden ser también arreglos.
Ejemplo
Sub Proc01(varA, varB, varC, …)
Aquellas variables que no llevan datos, son variables mudas y probablemente cuando el control es devuelto al procedimiento que lo llamó devolverá algún valor en dicha variable muda.
Un procedimiento llama a otro usando la siguiente sintaxis:
Call NomProc(Arg1,Arg2,…)
Vayamos al ModArreglos contenido en nuestro libro MisMacros01.xlsm.
Abra el libro y si desea, descárguelo haciendo clic aquí
Vaya a dicho modulo y con un doble clic ábralo par ver sus procedimientos: Arreglos01() y Arreglos02().Vaya a dicho modulo y con un doble clic ábralo par ver sus procedimientos: Arreglos01() y Arreglos02().Vaya a dicho modulo y con un doble clic ábralo par ver sus procedimientos: Arreglos01() y Arreglos02().
Veamos el primero:
Hemos tratado de segmentar las Sección de este procedimiento el cual se ejecuta uno independiente de otros, excepto que requiere de los datos que el llamador le debe pasar.
Vamos a colocar en un procedimiento Lectura todas las instrucciones que leen datos; en otro que se llame proceso, las instrucciones que ejecutan y en uno Salida, aquellas que usan MsgBox. A nuestro procedimiento principal o llamador, le llamaremos Arreglos.
He aquí los procedimientos:
Sub Arreglos()
……...
End Sub
Sub Lectura(n,A)
……...
End Sub
Sub Proceso(n,A,STot,Prom)
……...
End Sub
Sub Salida(S,Pr)
…… ...
End Sub
Las sentencias DIM deben digitarse en el procedimiento principal (el llamador). Digite o copie las sentencias que correspondan, desde el procedimento Arreglos01() hacia cada uno de estos procedimientos. Al final debemos tener:
Sub Arreglos()
Dim A(100) As Double
Dim i As Integer
' Vamos a leer n datos
' Calcularemos su suma y al final su promedio
' los imprimiremos
‘ Llamamos a Lectura para que se ejecute y recibimos de ella n y el vector A.
Call Lectura(n, A)
‘ LLamamos a Proceso y le pasmos n, A y le recibimos valores en STot y Prom
‘ Proceso devuelve Suma que pasa a STot y Promedio que pasa a Prom.
Call Proceso(n, A, STot, Prom)
‘ Llammos a Salida y le pasamos valores en STot y Prom, pero Lectura lo recibe en S y Pr
Call Salida(STot, Prom)
End Sub
Sub Lectura(n, A)
n = Val(InputBox("Nro de datos a procesar:"))
' Lectura de datos
For i = 1 To n
A(i) = Val(InputBox("Dato: " & i))
Next
End Sub
Sub Proceso(n, A, Suma, Promedio)
' Segmento de cálculo
Suma = 0
For i = 1 To n
Suma = Suma + A(i)
Next
Promedio = Suma / n
End Sub
Sub Salida(S, Pr)
' Emisión de resultados
MsgBox "La suma de los datos leídos es: " + Str(S) + Chr(13) + "Su promedio es: " + Str(Pr)
End Sub
Estando el cursor en el procedimiento principal (Arreglos), ejecute usando F5.
Nota:
Hay variables que son conocidas en todos los procedimientos: Son las variables públicas y se declaran en el procedimiento principal.
Hay otras varaiables que se usan al interior de un procedimiento: Son las variables locales. No tienen valor en otro procedimiento, salvo que se les dé un valor.
Ejercicio:
Haga lo mismo con el procedimiento ya creado Arreglo02(). Use otros nombres. El procedimiento que llama debe estar por encima de los llamados.Vaya a dicho modulo y con un doble clic ábralo par ver sus procedimientos: Arreglos01() y Arreglos02().
La siguiente imagen contiene un segmento de este módulo
En la siguiente sesión veremos el uso de procedimientos, llamada a procedimientos y operaciones matriciles como el cálculo de la matriz inversa
haga clic aquí