VBA – Procedimientos Privados vs Públicos (Procedimientos y Funciones)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on marzo 29, 2023

Este tutorial explicará la diferencia entre declaraciones públicas y privadas en VBA y cómo especificar módulos como privados.

Sub Procedimientos Públicos vs. Privados

Los Procedimientos (Sub y Funciones) pueden ser declarados Privados o Públicos en VBA. Si son Públicos, significa que usted podrá verlos desde la Ventana de Macros de Excel y pueden ser llamados desde cualquier lugar dentro de su Proyecto VBA. Si son Privados, no pueden ser vistos en la Ventana de Macros de Excel y sólo están disponibles para ser usados dentro del Módulo en el cual fueron declarados (usando métodos normales, vea al final de este artículo para formas de acceder a procedimientos privados desde otros módulos).

Las funciones públicas pueden ser llamadas como funciones incorporadas de Excel en la hoja de cálculo de Excel.

Nota: Las Variables y Constantes también pueden ser Públicas o Privadas.

 

Ventana de Macros de Excel

Por defecto, las Macros de Excel (la mayoría de los Procedimientos VBA) son visibles para los usuarios del libro en la Ventana de Macros:

Ventana de Macros en Excel

 

Estos se consideran procedimientos Públicos. Puede definir explícitamente los procedimientos como públicos añadiendo «Public» antes de la sentencia Sub:

Public Sub Hola_Mundo()
   MsgBox "Hola Mundo"
End Sub

Si no defines el procedimiento como Público, se asumirá como Público.

Para declarar un procedimiento como Privado, simplemente añada «Private» antes de la sub-declaración del procedimiento:

Private Sub Hola_a_Todos()
    MsgBox "Hola a Todos"
End Sub

El segundo procedimiento no será visible en la ventana de macros para los usuarios de Excel, pero podrá seguir utilizándose en su código VBA.

Ventana de Macros Muestra Sub Público y Privado en Excel

 

Procedimientos con Argumentos

Los subprocedimientos pueden tener argumentos. Los argumentos son entradas al subprocedimiento:

Sub Hola(cNombre As String)
   MsgBox "Hola " & cNombre
End Sub

Si un subprocedimiento tiene argumentos, nunca aparecerá en la ventana de macros aunque esté declarado como público, porque no hay forma de declarar los argumentos.

Las funciones tampoco aparecerán nunca en la ventana de macros, aunque estén declaradas públicas.

Ventana de Macros Solo Macros Publicas sin Argumentos

Las funciones públicas en Excel se pueden utilizar directamente en una hoja de cálculo como una ‘Función Definida por el Usuario‘ (UDF). Se trata básicamente de una fórmula personalizada que se puede ejecutar directamente en una hoja de cálculo. Se pueden encontrar en la categoría «Definidas por el usuario» de la ventana «Insertar función» o se pueden escribir directamente en una celda.

Uso de Funciones Definidas por el Usuario en Excel

 

Uso de Procedimientos entre Módulos en su Proyecto VBA

Los procedimientos públicos pueden ser llamados desde cualquier módulo o formulario dentro de su Proyecto VBA.

Llamar Procedimiento Publico desde Otro Módulo

 

El intento de llamar a un procedimiento privado desde un módulo diferente dará lugar a un error (Nota: véase la parte inferior de este artículo para una solución).

Llamar Procedimiento Privado desde Otro Módulo

 

Nota: Los procedimientos públicos y las variables de los módulos de clase se comportan de forma ligeramente diferente y quedan fuera del ámbito de este artículo.

Módulos diferentes, pueden almacenar procedimientos con el mismo nombre, siempre que ambos sean privados.

Si dos o más procedimientos tienen el mismo nombre y se declaran públicos obtendrá un error de compilación ‘Nombre ambiguo detectado’ al ejecutar el código.

Procedimiento Ambiguo

 

Módulos Privados

Por defecto, los módulos son públicos.

Para hacer que un módulo sea privado, ponga la siguiente palabra clave en la parte superior del módulo.

Option Private Module

Si declara un módulo como privado, los procedimientos del módulo no serán visibles para los usuarios de Excel. Los procedimientos de función no aparecerán en la ventana Insertar función, pero podrán utilizarse en la hoja de Excel siempre que el usuario conozca el nombre de la función

Llamado de UDF en Módulos Privados desde Excel

 

Los subprocedimientos no aparecerán en la ventana de macros, pero podrán utilizarse en el proyecto VBA.

Acceso a un Procedimiento Privado desde un Módulo Diferente

Como se mencionó anteriormente, los Procedimientos Privados son inaccesibles en otros módulos de código por métodos «normales». Sin embargo, puede acceder a los procedimientos privados utilizando el comando Application.Run disponible en VBA.

Considere los siguientes 3 módulos.

Acceso a Procedimiento Privado desde Módulo Diferente

 

El módulo 2 es un módulo privado con un subprocedimiento público, mientras que el módulo 3 es un módulo público con un subprocedimiento privado.

En el Módulo1, podemos llamar a HolaMundo – la Opción Módulo Privado en la parte superior no nos impide llamar al Sub Procedimiento – todo lo que hace es ocultar el Sub Procedimiento en la Ventana de Macros.

Tampoco necesitamos la sentencia Call – está ahí para hacer el código más fácil de leer.

El código también podría verse así

Sub LlamarHolaDePrivado()
    'Llama un sub desde un módulo privado
    HolaMundo
End Sub

También podemos ejecutar el subprocedimiento HolaMundo utilizando el comando Application.Run de VBA.

Sin embargo, en el Módulo 3, el procedimiento HolaMundo ha sido declarado Privado. No puede llamarlo desde otro módulo utilizando medios ‘normales’, es decir, la sentencia Call.

Debe utilizar el comando Application.RunCommand para ejecutar un subprocedimiento privado desde otro módulo.

Sub LlamarBuenosDías()
    'Ejecutar un sub Privado desde un módulo Público
    Application.Run ("BuenosDiasMundo")
End Sub

Note que cuando usa el comando Application.RunCommand, tiene que poner el nombre del SubProcedimiento entre comillas.

Si intentamos usar la sentencia Call para ejecutar el subprocedimiento BuenosDiasMundo, se producirá un error.

Error Sub o Function No Definido

 

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples