Procedimientos públicos y privados de VBA (subvenciones y funciones)

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

Subprocedimientos públicos vs privados

Los procedimientos (sub y funciones) se pueden declarar privados o públicos en VBA. Si son públicos, significa que podrá verlos desde la ventana de macros de Excel y se puede llamar desde cualquier lugar dentro de su proyecto VBA. Si son privados, no se pueden ver en la ventana de macros de Excel y solo están disponibles para usarse dentro del módulo en el que se declaran (utilizando métodos normales, consulte la parte inferior de este artículo para conocer las formas de acceder a procedimientos privados desde otros módulos) .

Las funciones públicas se pueden llamar como funciones integradas 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

De forma predeterminada, las macros de Excel (la mayoría de los procedimientos de VBA) son visibles para los usuarios de libros de trabajo en la ventana de macros:

Estos son considerados Público procedimientos. Puede definir explícitamente los procedimientos como públicos agregando "Público" antes de la instrucción Sub:

123 Público Sub HelloWorld ()MsgBox "Hola mundo"End Sub

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

Para declarar un procedimiento como Privado, simplemente agregue "Privado" antes de la sub instrucción del procedimiento:

123 Sub privado Hola a todos ()MsgBox "Hola a todos"End Sub

El segundo procedimiento no sería visible en la ventana Macro para los usuarios de Excel, pero aún se puede usar en su código VBA.

Procedimientos con argumentos

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

123 Sub Hello (strName como cadena)MsgBox "Hola" & strNameEnd Sub

Si un subprocedimiento tiene argumentos, nunca aparecerá en la Ventana de macro independientemente de si está declarado Público porque no hay forma de declarar los argumentos.

Las funciones tampoco aparecerán nunca en la ventana de macros, independientemente de si se declaran públicas.

Las funciones públicas en Excel se pueden usar directamente en una hoja de trabajo como una "función definida por el usuario" (UDF). Básicamente, se trata de una fórmula personalizada que se puede llamar directamente en una hoja de trabajo. Se pueden encontrar en la categoría "Definido por el usuario" en la ventana "Insertar función" o se pueden escribir directamente en una celda.

Programación VBA | ¡Code Generator funciona para usted!

Uso de procedimientos entre módulos en su proyecto VBA

Los procedimientos públicos se pueden llamar desde cualquier módulo o formulario dentro de su proyecto VBA.

Si intenta llamar a un procedimiento privado desde un módulo diferente, se producirá un error (Nota: consulte la parte inferior de este artículo para obtener una solución alternativa).

Nota: Los procedimientos públicos y las variables en los módulos de clase se comportan de manera ligeramente diferente y están fuera del alcance de este artículo.

Diferentes módulos, 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.

Módulos privados

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

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

1 Opción Módulo Privado

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 aún se pueden usar en la hoja de Excel siempre que el usuario sepa el nombre de la función.

Los subprocedimientos no aparecerán en la ventana de macro, pero aún estarán disponibles para usarse dentro del proyecto VBA.

Acceder 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 mediante métodos "normales". Sin embargo, puede acceder a procedimientos privados utilizando el Aplicación.Ejecutar comando disponible en VBA.

Considere los siguientes 3 módulos.

El módulo 2 es un Privado Módulo con un Público Subprocedimiento, mientras que Module3 es Público módulo con un Privado Subprocedimiento.

En Module1, podemos llamar Hello World - el Opción Módulo Privado en la parte superior no nos impide llamar al subprocedimiento; todo lo que sirve para hacer es ocultar el subprocedimiento en la ventana macro.

Tampoco necesitamos la instrucción Call, está ahí para facilitar la lectura del código.

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

1234 Sub CallHelloFromPrivate ()'llamar a un sub desde un módulo privadoHola MundoEnd Sub

También podemos ejecutar el subprocedimiento HelloWorld usando el VBA Aplicación.Ejecutar mando.

Sin embargo, en Module3, el procedimiento GoodMorningWorld se ha declarado Privado. No puede llamarlo desde otro módulo utilizando medios "normales", es decir, la declaración de llamada.

Tienes que usar Application.RunCommand para ejecutar un Sub privado desde otro módulo.

1234 Sub CallGoodMorning ()'ejecutar un sub privado desde un módulo públicoApplication.Run ("GoodMorningWorld")End Sub

Observe cuando usa el Application.RunCommand comando, debe poner el nombre del subprocedimiento entre comillas.

Si intentamos utilizar la instrucción Call para ejecutar el subprocedimiento GoodMorningWorld, se produciría un error.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave