Saltar al contenido

Variable estática pública en excel vba

Es fundamental entender el código de forma correcta previamente a utilizarlo a tu trabajo si tdeseas aportar algo puedes comentarlo.

Solución:

Prueba esto llamando PRINCIPAL() :

Public myvar As Integer

Sub MAIN()
    Call SetVar
    Call UseVar
End Sub

Sub SetVar()
    myvar = 999
End Sub

Sub UseVar()
    Dim newvar As Variant
    newvar = myvar * 0.5
    MsgBox newvar
End Sub

Si declaras un artículo Estático , su valor se conservará dentro del procedimiento o sub.
Si declara el artículo Público , su valor se conservará y será visible para otros procedimientos también.

Aunque esta pregunta fue respondida hace más de cuatro años por @Gary’s Student, hay un matiz sutil que vale la pena mencionar, ya que la solución puede depender del tipo de datos de myvar.

En primer lugar, como ha señalado en la pregunta, Public Static myvar as Integer no funciona, porque Static solo se permite dentro de un sub o función.

Como se señaló en los comentarios al OP por @Patrick Lepelletier, puede evitar esto fácilmente declarando un Constant en su lugar (asumiendo que no necesita cambiarlo dinámicamente): Public Const myvar as Integer = 999. (O posiblemente Private Const myvar...)

Otra opción es declarar myvar como un función en lugar de una variable o constante, convirtiéndolo efectivamente en un pseudo-constante:

Private Function myvar() as Integer
     Static intMyvar as Integer 
     intMyvar = 999
     myvar = intMyvar
End function

En este sencillo ejemplo donde myvar es un número entero, el enfoque de pseudo-constante es obviamente innecesario y agrega la sobrecarga de una llamada de función. Simplemente declarando un Constant hace el trabajo. Sin embargo, usar una constante solo funciona si el valor es static y no es un objeto. No funcionará si myvar es un objeto, por ejemplo un Range. En ese caso, el uso de pseudo-constantes podría ser útil:

Private Function myvar() as Range
    Set myvar = Range("A1")
End Function

Otra ventaja es que puede usar código dentro de la función para verificar ciertas condiciones y asignar diferentes valores a myvar respectivamente.

El enfoque de pseudoconstante también se puede combinar con rangos de hojas de cálculo de nombres: si la celda A1 es un rango con nombre, digamos MyRange, entonces podrías escribir:

Dim strMyString as String
strMyString = "MyRange"
Private Function myvar() as Range
    Set myvar = Range(strMyString)
End Function

Ahora es posible moverse por el contenido de la celda A1 sin romper el código, ya que el rango con nombre sigue si corta y pega la celda. Encuentro este enfoque útil en la etapa de diseño, cuando las cosas tienden a moverse mucho en una hoja de trabajo.

Las pseudoconstantes también ayudan a evitar algunos problemas generalmente asociados con variables globales (o de nivel de módulo) que pueden ser un problema en proyectos más grandes.

Te invitamos a añadir valor a nuestra información tributando tu veteranía en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *