Procedimiento Sub (Públicos, Privados y Static)

🔴 Aprende a utilizar los procedimientos SUB Públicos, Privados y Staticos. Public, Private, Static. Aprende de estos ejercicios para el uso de Macros Tipo Sub.

Que son los Procedimiento Sub (Públicos, Privados y Static)

En este nuevo tutorial aprenderemos los Procedimientos Sub Públicos, Privados y Static son formas de privacidad con las que se ejecutan las macros, se pueden asignar a cada macro una forma de privacidad, y estás pueden ser ejecutadas o no dependiendo de su codificación.

| Curso Excel VBA y Macros. ¡Empecemos!

Estructura básica de una macro

✅Para entender la estructura básica de una macro en Excel es necesario tener un previo conocimiento de la estructura desde la raíz. Ejemplo: Si estamos en el editor de VBA debemos saber que estamos dentro de un libro.

Podremos ver la barra principal en la que observamos nuestro nombre del programa y el Libro.

👉 En esta ventana veremos los siguientes secciones:

Descripción de cada uno de las secciones.

  1. Nombre del Archivo.
  2. Proyectos
  3. Módulos
  4. Procedimientos

1. Nombre del ARCHIVO.

2. PROYECTOS.

3. MÓDULOS

4. PROCEDIMIENTOS

PROCEDIMIENTO SUB – FUNCTION – PROPERTY

  1. SUB – Realiza acciones, no devuelve un valor.
  2. FUNCTION Devuelve un valor.
  3. PROPERTY son propiedades personalizadas.

En este artículo veremos el procedimiento SUB.

ÁMBITOS PUBLIC PRIVATE STATIC

✅ Veamos los ámbitos en los que pueden operar estos procedimientos.

  1. Public
  2. Private
  3. Static

1. El ámbito Public se puede utilizar desde cualquier módulo. Los módulos se pueden comunicar entre ellos. Si creas una macro en el módulo 1 también se puede utilizar en el módulo 2.

2. El ámbito Private solo está disponible en el módulo que se ha creado. Es decir no se puede compartir entre los módulos.

3. El ámbito Static sus variables estarán siempre disponibles.

EXTRUCTURA DEL CÓDIGO DE LA MACRO

La estructura del código de la Macro empieza con la palabra Sub + nombre de la MACRO nombremacro() y cierra en End Sub. Dentro de esta llave insertaremos nuestro código. A continuación haremos el siguiente ejemplo, vamos a nuestro libro de Excel y en la página 1 damos clic derecho ver código. 👀

👉Nos abrirá la ventana principal del editor de Visual Basic.

👉Recuerden que estamos dentro del LIBRO 1. Ahora vamos a crear nuestro módulos para poder crear nuestras macros. Vamos a la pestaña insertar y damos clic en Módulo. Ahora nos encontraremos en el módulo.

👉En esta ventana ponemos el código Sub recuerden que hay fuentes que no aceptan tildes. Para este apartado recomendamos Arial Báltico. Iniciamos con la palabra Sub espacio más el nombre que se nos ocurra, ejemplo Macro_A y presionamos enter, automáticamente nos creará la estructura base y saldrá End Sub. 🏆

👉OJO- Evite iniciar con números, espacios en blanco, signos de puntuación o caracteres especiales.👀

RECUERDA QUE EXISTEN FUENTES QUE NO ACEPTAN DETERMINADOS CARACTERES.
Te recomendamos que pruebes algunos caracteres especiales antes y veas si estos se insertan en tu código, por ejemplo un caracter como la letra (Ñ) o vocales con tilde, en algunas fuentes seleccionadas no tienen estas letras o vocales con acento y automáticamente el programa remplaza la letra por un caracter determinado, pudiéndose ver como un error de ortografía.

EJEMPLO 1 USANDO PROCEDIMIENTO SUB AMBITO PÚBLICO

✅ Si usamos este código

Sub Macro_A()
End Sub


👉Es igual a este


Public Sub Macro_A()
End Sub

👉Debido a que VBA automáticamente da a este procedimiento el ámbito público. Es decir Excel va detectar como una variable pública.

👉Seguimos usando ahora el comando MsgBox para dar un mensaje:

Sub Macro_A()
MsgBox “Macro A”
End Sub

👉Copiamos cambiando el nombre de la macro y del mensaje a por ejemplo Macro B – recuerda que deben ir entre comillas.

Sub Macro_B()
MsgBox “Macro B”
End Sub

👉Ahora ejecutamos primero poniendo el cursor sobre la macro que deseamos ejecutar, empezamos con Macro_A() y luego ponemos el cursor en Macro_B() y ejecutamos, veremos que nos sale el mensaje según el macro que seleccionamos.

Ahora haremos un ejemplo creando el MÓDULO2, para eso vamos a Insertar> Módulo y veremos el comportamiento de nuestras macros.

Si hacemos clic en nuestro MÓDULO2 veremos que no contiene macros, copiamos nuestro código y ponemos este nombre Macro_C() y Macro_D()

Sub Macro_C()
MsgBox “Macro C”
End Sub
Sub Macro_D()
MsgBox “Macro D”
End Sub

Podemos observar que la Macro_C() y Macro_D() están en el MÓDULO2.

Ahora si desearíamos ejecutar la Macro_A() – estando en la Macro_C() del MÓDULO2 solo ponemos el nombre de nuestra Macro_A en el código y está la ejecutará.

👉OJO ejecutará la Macro_A() siempre y cuando en el MÓDULO1 esta macro esté en modo público en su código. Ejemplo:👀

Sub Macro_C()
MsgBox “Macro C”
Macro_A
End Sub

👉Si ejecutamos este código de la Macro_C() lo primero que va pasar es que va ejecutar el mensaje que contiene lo siguiente “Macro C”, y luego ejecutará la Macro_A – y recuerda que esta macro contiene un mensaje que será también ejecutado el cual dice “Macro A”

EJEMPLO 2 USANDO PROCEDIMIENTO SUB ÁMBITO PRIVADO

Una Macro que tiene ámbito privado en el MÓDULO1 no puede ejecutarse desde el MÓDULO2, ejemplo:

MÓDULO1

Private Sub Macro_A()
MsgBox “Macro A”
End Sub

MÓDULO2

Sub Macro_C()
MsgBox “Macro C”
Macro_A
End Sub

Se sabe que Macro_A() se encuentra en el MÓDULO1 y tiene en este ejercicio se le ha puesto el Ámbito Privado, en el ejercicio se ve que en el MÓDULO2 la Macro_C() en su código primero ejecuta la Macro_C() este a su vez activa el comando MsgBox y da un mensaje llamado “Macro C” y después de esa acción sigue con la ejecución de la Macro_A pero este no puede ejecutarse ya que en el MÓDULO1 la macro esta como Private Sub Macro_A() es decir está con ámbito privado; en conclusión veremos este mensaje de error y no podrá ejecutarlo.

MANERAS DE LLAMAR A UNA MACRO

Para poder llamar a una macro también podemos usar:

  • Escribiendo el nombre de la macro dentro de un módulo ejemplo : Macro_A es el nombre de nuestra macro, y queremos ejecutarla desde el MÓDULO2, escribimos el nombre dentro de nuestro módulo y este ejecutará la macro.
  • Usando el COMANDO Call
  • Poniendo el nombre y número del módulo en el que se encuentra la macro, por ejemplo si nuestra macro esta en el módulo 1 podemos solo poner lo siguiente MÓDULO1. ojo seguido de un punto, este ejecutara primero el módulo que hayamos elegido y seguidamente el modulo 1.

RECUERDEN NO PODEMOS TENER MACROS CON EL MISMO NOMBRE 👀

Si ejecutamos una macro que en otro módulo tiene el mismo nombre nos saldrá el siguiente mensaje de error:

TRABAJANDO CON MACROS PRIVADAS

En nuestro MÓDULO2 pondremos nuestras macros al ámbito privado, es decir añadiendo el ámbito private al inicio del código.

Private Sub Macro_C()
MsgBox “Macro C”
End Sub
Private Sub Macro_D()
MsgBox “Macro D”
End Sub

RECUERDEN NO SE PUEDE LLAMAR A UNA MACRO PRIVADA DESDE OTRO MÓDULO 👀

✅¿SE PUEDE EJECUTAR UNA MACRO PRIVADA DESDE OTRA MACO?✅

Sí se puede ejecutar siempre y cuando la macro privada se encuentra en un mismo Módulo.

Private Sub Macro_C()
Macro_D
End Sub
Private Sub Macro_D()
MsgBox “Macro D”
End Sub

✅ VISUALIZACIÓN DE MÓDULOS Y MACROS AMBITO PRIVADO Y PÚBLICO

Las macros que están en ámbito público podrán ser observadas en nuestra ventana de macros.
Las macros que están em ámbito privado no podrán ser observadas en nuestra ventana de macros.

MÓDULO1
Sub Macro_A()
MsgBox “Macro A”
End Sub
Sub Macro_B()
MsgBox “Macro B”
End Sub

MÓDULO2
Private Sub Macro_C()
MsgBox “Macro C”
End Sub
Private Sub Macro_D()
MsgBox “Macro D”
End Sub

Podemos observar que las macros de ámbito público se muestran y las de ámbito privado no se pueden visualizar.

Por ejemplo si creamos dos macros más con ámbito público en el MÓDULO1 con el nombre Macro_AA() y el otro lo llamamos MacroBB() veremos que en nuestra ventana de macros aparecen estas macros.

MÓDULO1
Sub Macro_A()
MsgBox “Macro A”
End Sub
Sub Macro_B()
MsgBox “Macro B”
End Sub
Sub Macro_AA()
MsgBox “Macro A”
End Sub
Sub Macro_BB()
MsgBox “Macro B”
End Sub

✅PONER UN MÓDULO EN ÁMBITO PRIVADO

Sí se puede poner un MÓDULO entero en ámbito privado con esta línea de código al inicio del módulo.
Option Private Module

Ejemplo:

Creamos un nuevo Módulo desde la pestaña Insertar > Módulo y ahora este será el MÓDULO3.

Option Private Module
Sub Macro_A()
MsgBox “Macro A”
End Sub
Sub Macro_B()
MsgBox “Macro B”
End Sub
Sub Macro_AA()
MsgBox “Macro A”
End Sub
Sub Macro_BB()
MsgBox “Macro B”
End Sub

Si vamos a ver nuestra lista de macros veremos que no se pueden ver ninguno de nuestras macros, así estas macros estén en ámbito público, lo que sucede es que nuestro MÓDULO3 está en ÁMBITO PRIVADO.

Poner el MÓDULO en ámbito privado nos sirve para evitar mostrar todas las macros en nuestra ventana, evitar confusiones y tener un mejor orden.

✅ ÁMBITO STATIC

Creamos un nuevo Módulo desde la pestaña Insertar > Módulo y ahora este será el MÓDULO4. En este módulo haremos un ejemplo con una macro con ámbito static para poder entender su comportamiento.

MÓDULO 4

Static Sub Macro_estatica()
numero = numero + 1
MsgBox numero
End Sub

Si ejecutamos podremos observar que nuestra macro genera un comportamiento de suma que asigna a la variable numero un valor de 0 y le suma 1, ahora la variante numero vale 1 y si volvemos a ejecutar adquirirá un nuevo valor sumado 1. La macro da un mensaje con el número 2 al volver a ejecutarla, si volvemos a ejecutar veremos que el mensaje nos da 3, si volvemos a ejecutar veremos el mensaje que dice 4, y así sucesivamente ya que la variable numero va adquiriendo un nuevo valor sumado de 1 en 1, esto es porque nuestro código tiene el ámbito Static y su trabajo es almacenar la variable, es decir está realizando su comportamiento asignado a la macro.

Si sacamos el ambito Static nuestra macro al ejecutarse siempre nos dará el mensaje 1.

👉 Te recomendamos ver estos artículos: 👀
Procedimiento Function (Public, Private, Static)
Procedimiento Function II (Public, Private y Static)
Módulos, Módulo de Clase y UserForms

Related Articles

Responses

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *