Comprender el alcance y la visibilidad

Microsoft VBA

Comprender el alcance y la visibilidad

   

El alcance se refiere a la disponibilidad de una variable, constante, o procedimiento para ser usado por otro procedimiento. Hay tres niveles de alcance: nivel de procedimiento, nivel de módulo privado y nivel de módulo público.

El alcance de una variable se determina cuando se declara. es aconsejable declarar todas las variables explícitamente para evitar errores de conflicto de nombres entre variables que tiene alcances distintos.

Definir el alcance de un nivel de procedimiento

Una variable o constante definida desde dentro de un procedimiento no es visible fuera de ese procedimiento. Sólo el procedimiento que contiene la declaración de la variable puede usarlos. En el siguiente ejemplo, el primer procedimiento presenta un cuadro de mensaje que contiene una cadena de texto. El segundo procedimiento presenta un cuadro de mensaje en blanco ya que la variable strMensaje es local para el primer procedimiento.

Sub VariableLocal()
    Dim strMensaje As String
    strMensaje = "Esta variable no se puede usar fuera de este procedimiento."
    MsgBox strMensaje
End Sub

Sub FueraAlcance()
    MsgBox strMensaje
End Sub

Definir el alcance de nivel de módulo privado

Se pueden definir variables y constantes de nivel de módulo en la sección Declarations de un módulo. Las variables de nivel de módulo pueden ser públicas o privadas. Las variables públicas están disponibles para todos los procedimientos de todos los módulos de un proyecto; las variables privadas sólo están disponibles para los procedimientos de ese módulo. Las variables declaradas con la instrucción Dim en la sección Declarations tiene un alcance privado a no ser que se especifique otra cosa. Sin embargo, es aconsejable colocar la palabra clave Private delante del nombre de la variable para que el alcance sea evidente al leer el código.

En el siguiente ejemplo, la variable de cadena strMensaje está disponible para cualquier procedimiento definido en el módulo. Cuando se llama al segundo procedimiento, presenta el contenido de la variable de cadena strMensaje en un cuadro de dialogo.

' Añada lo siguiente a la sección de Declarations del módulo.
Private strMensaje sAs String

Sub InicializaVariablePrivada()
    strMensaje = "Esta variable no se puede usar fuera de este módulo."
End Sub

Sub UsaVariablePrivada()
    MsgBox strMensaje
End Sub

Nota    Los procedimientos públicos de un módulo estándar o módulo de clase están disponibles para cualquier proyecto de referencia al proyecto actual. Para limitar el alcance de todos los procedimientos de un módulo al proyecto actual, añada una instrucción Option Private Module a la sección Declarations del módulo. Las variables y procedimientos públicos seguirán estando disponibles para los restantes procedimientos del proyecto actual, pero no lo estarán para los proyectos que a los que puedan hacer referencia.

Definir el alcance de nivel de módulo público

Si se declara una variable de nivel de módulo como pública, estará disponible para todos los procedimientos del mismo proyecto. En el siguiente ejemplo, la variable de cadena strMensaje se puede usar en cualquier procedimiento de un módulo del proyecto.

' Incluya esto en la sección Declarations del módulo.
Public strMensaje As String

Todos los procedimientos son públicos a menos que se especifique lo contrario, excepto en el caso de los procedimientos evento. Cuando Visual Basic crea un procedimiento evento, la palabra clave Private se inserta automáticamente antes de la declaración del procedimiento. Para los restantes procedimientos, debe declarar explícitamente con la palabra clave Private si no desea que sean públicos.

Se pueden usar procedimientos, variables y constantes públicas definidas en módulos estándar o módulos de clase de proyectos que hagan referencia al actual. Sin embargo, es preciso establecer una referencia al proyecto en que están definidos.

Los procedimientos, variables y constantes públicas definidas en módulos que no sean estándar o de clase, como pueden ser los módulos de formulario o módulos de informe, no están disponibles desde los proyectos que hacen referencia al actual, ya que estos módulos son privados para el proyecto en el que residen.