2010-09-28 22 views
56

En VB6/VBA, puede declarar variables de nivel de módulo fuera de un método específico Sub o Function. He usado Private y Public antes de módulos dentro y los entiendo así:¿Cuál es la diferencia entre Dim, Global, Public y Private Modular Field Access Modifiers?

  • Public - visible para todo el código en el interior del módulo y todo el código fuera del módulo, por lo que en esencia es global.
  • Private - visible solo para codificar dentro del módulo.

Me di cuenta de que puede usar Dim y Global como modificadores para las variables modulares. ¿Son Dim y Global diferentes de Private y Public, respectivamente, cuando se usan como modificadores de acceso en campos modulares? Si es así, ¿cómo son diferentes?

Respuesta

75

Dim y Private funcionan igual, aunque la convención común es usar Private en el nivel de módulo, y Dim en el nivel Sub/Función. Public y Global son casi idénticos en su función, sin embargo, Global solo se puede usar en módulos estándar, mientras que Public se puede usar en todos los contextos (módulos, clases, controles, formularios, etc.) Global proviene de versiones anteriores de VB y probablemente se mantuvo para la compatibilidad con versiones anteriores, pero ha sido completamente reemplazado por Public.

+0

Gracias por su respuesta. Tu explicación es más o menos lo que había estado pensando. Estoy empezando en un gran bloque de código heredado que tiene los cuatro modificadores utilizados en las secciones de declaraciones de un solo módulo. –

+2

Las variables globales mantienen su valor después de la ejecución. – Kiril

+9

Comparando sus comentarios con la ayuda en línea para Excel 2010 revela un par de puntos muy finos: "Las variables declaradas usando la declaración pública están disponibles para todos los procedimientos en todos los módulos en todas las aplicaciones a menos que esté en vigencia el Módulo privado opcional; en tal caso, las variables son públicas solo dentro del proyecto en el que residen. Además, tenga cuidado: la declaración pública no se puede usar en un módulo de clase para declarar una variable de cadena de longitud fija Dado que ambos casos son oscuros, ninguno es una preocupación práctica. Sin embargo, en aras de la integridad. –

Cuestiones relacionadas