En todos los lenguajes de programación, tenemos especificadores de acceso a variables que definen desde dónde se puede acceder a una variable definida. Excel VBA no es una excepción. VBA también tiene especificadores de alcance. Estos especificadores de alcance se pueden usar para establecer la visibilidad / alcance de una variable en Excel VBA.

En Excel VBA, tenemos tres tipos de especificadores de alcance:

  1. Nivel de procedimiento. Privado – Nivel de módulo. Público – Nivel de proyecto === Nivel de procedimiento de VBA Alcance de la variable Las variables que se declaran dentro de una subrutina, solo se pueden acceder en ese procedimiento / función. Tienen un alcance a nivel de procedimiento. Por lo general, se declaran con la palabra clave Dim. Si el módulo tiene una opción implícita, es posible que la variable no se haya declarado, solo se haya utilizado directamente.

En el siguiente ejemplo, tenemos una prueba de alcance de subrutina que tiene variables xey. Cuando ejecutamos la primera subrutina, funciona perfectamente e imprime la suma de X e Y

Option Explicit

Sub scopeTest()

Dim x, y As Integer ' Procedure level variable in VBA

x = 2

y = 3

Debug.Print x + y

End Sub

Sub sum()

x = 5

y = 7

Debug.Print x + y

End Sub

Pero cuando ejecuta la suma de subrutinas, arroja un error de que la variable no está declarada. ¿Por qué? Debido a que X e Y son privados para el procedimiento scopeTest y la subrutina sum no tiene acceso a ellos.

Por lo tanto, el submarino se encuentra con un error.

image

Variable privada de VBA – Alcance del nivel del módulo Cuando desee declarar una variable a la que se debe acceder en todo el módulo, declare esa variable como privada en la parte superior del módulo, antes de cualquier subrutina o función.

Las variables declaradas antes de cualquier subrutina, en el módulo, son por defecto Privadas. Incluso si los declara con la palabra clave Dim. Pero para ser específico, es aconsejable utilizar la palabra clave Privada.

Los dos procedimientos siguientes están en el mismo módulo, módulo 1.

Option Explicit

'Module level variable in VBA. Both variables x and y are private to this module. and

'can be accessed from any sub or function within this module.

Dim x As Integer

Private y As Integer

Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3

Debug.Print x + y

End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

Las dos funciones anteriores funcionarán perfectamente bien ya que las variables xey son las variables privadas de este módulo.

Importante: Los últimos valores almacenados en xey se conservan hasta en todo el módulo. Si ejecutamos el sub scopeTest primero y no inicializamos los valores de xey en sub sum y lo ejecutamos, entonces el valor inicial de xey no cambiará .

La siguiente subrutina se define en un módulo separado, módulo 2. Cuando intento acceder a la variable desde otro módulo, el procedimiento (o función) de VBA se encuentra con un error.

image

Pero si trato de llamar a la suma de subrutinas del módulo 1 en el módulo 2, esto funciona perfectamente. Para hacer que su función y subrutinas sean privadas para el módulo, use la palabra clave Private antes de la sub y la función.

Nota: – Las variables declaradas antes de cualquier subrutina o función, en un módulo son privadas del módulo por defecto. Puede utilizar la palabra clave privada. Pero las funciones y subrutinas son públicas de forma predeterminada y cualquier módulo de un proyecto puede acceder a ellas. Para hacer que las funciones y subrutinas sean privadas para el módulo, debe usar la palabra clave Privada . === Variables públicas – Alcance del nivel del proyecto Como aprendimos en los ejemplos anteriores, la función y las subrutinas son públicas por defecto y se puede acceder desde cualquier módulo pero las variables no lo son. Para hacer que una variable sea accesible desde cualquier módulo en Excel VBA, usamos la palabra clave pública. * Para declarar una variable pública en un proyecto, las ha declarado en la parte superior del módulo, antes de cualquier función o subrutina con la palabra clave pública. El siguiente código está escrito en el módulo 1.

Option Explicit

'Project level variable in VBA.

Public x As Integer

Public y As Integer

Public Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3



End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

Y esta subrutina está en otro módulo, módulo 2.

Option Explicit

Sub mul()

Call scopeTest

'Call sum         ' it won't work as it is private to the module 1

Debug.Print x * y

End Sub

Esta vez funciona perfectamente.

Primero he llamado a la subrutina scopeTest. Dado que el scopeTest es público, se llama. Inicializa los valores de xey. A continuación, multiplicamos x e y. Dado que la subrutina scopeTest la había inicializado con los valores 2 y 3, el resultado que obtenemos es 6.

Así que sí, chicos, así es como pueden usar los especificadores de alcance variable en Excel para controlar la visibilidad de variables, funciones y subrutinas en proyectos de Excel VBA.

Traté de explicar los Especificadores de acceso de VBA de la manera más simple que pude. Espero que haya sido explicativo. Si tiene alguna duda con respecto a este artículo o cualquier otra duda relacionada con VBA, pregúnteme en la sección de comentarios a continuación. Estaré feliz de contar contigo.

Artículos relacionados:

enlace: / celdas-rangos-filas-y-columnas-en-vba-cuál-es-la-diferencia-entre-byref-y-byval-argumentos-vba-entrevista-pregunta [ByRef y ByVal argumentos] | Cuando un argumento se pasa como un argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.

link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar hojas sin mensajes de confirmación usando VBA en Microsoft Excel] | Desde está eliminando hojas usando VBA, sabe lo que está haciendo. Le gustaría decirle a Excel que no muestre esta advertencia y elimine la maldita hoja.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add And Save New Workbook Using VBA In Microsoft Excel 2016] | En este código, primero creamos una referencia a un objeto de libro de trabajo. Y luego lo inicializamos con un nuevo objeto de libro de trabajo. El beneficio de este enfoque es que puede realizar operaciones en este nuevo libro de trabajo fácilmente. Como guardar, cerrar, eliminar, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Mostrar un mensaje en La barra de estado de Excel VBA] `La barra de estado en Excel se puede utilizar como un monitor de código. Cuando su código de VBA es extenso y realiza varias tareas usando VBA, a menudo deshabilita la actualización de la pantalla para que no vea esa pantalla parpadeando `link: / general-topics-in-vba-turn-off-warning-messages- using-vba-in-microsoft-excel [Desactivar los mensajes de advertencia con VBA en Microsoft Excel 2016] `| Este código no solo deshabilita las alertas de VBA sino que también aumenta la eficiencia de tiempo del código. Veamos cómo.

Artículos populares:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-incrementa-su-productividad [50 accesos directos de Excel para aumentar su productividad] | Acelera tu tarea. Estos 50 atajos lo harán trabajar aún más rápido en Excel.

link: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP en Excel] | Esta es una de las funciones más utilizadas y populares de Excel que se utiliza para buscar valores de diferentes rangos y hojas. enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016] | Cuente valores con condiciones usando esta asombrosa función. No necesita filtrar sus datos para contar un valor específico.

La función Countif es esencial para preparar su tablero.

link: / excel-formula-and-function-excel-sumif-function [Cómo usar la función SUMIF en Excel] | Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.