2011-02-13 29 views
6

En Excel 2003, ¿cómo puedo declarar variables globales e inicializarlas solo una vez, es decir, cuando se abre el libro?Inicializando variables globales en VBA

Tengo algunos parámetros que son utilizados por unas pocas macros: caminos para ingresar archivos, básicamente. Por el momento, mi código es el siguiente:

global path1, path2 as string 

sub initPaths 
    path1 = 'path\to\file1' 
    path2 = 'path\to\file2' 
end sub 

Entonces, cada vez que necesito utilizar archivo1 archivo2 o en una subrutina o función, inserto una llamada a initPaths. Pero esto parece bastante poco elegante; Me gustaría poder establecer las rutas solo una vez en lugar de repetidas veces.

+2

Veo que ya ha aceptado la respuesta de Steve Jorgensen sobre Constantes (y es una buena), pero * también tenga en cuenta * que en su código original solo 'path2' será una Cadena - 'path1' será una Variante . Para declarar dos variables tipadas en la misma línea, debe dar el tipo para cada una, por lo tanto: 'ruta global1 como cadena, ruta2 como cadena'. – RolandTumble

+0

No puedo creer que no haya notado eso. Sí - lo que dijo

Respuesta

13

Según su ejemplo, parece que lo que quiere son constantes, no variables globales.

Public Const PATH1 = "path\to\file1" 
Public Const PATH2 = "path\to\file2" 

Si realmente es necesario utilizar código para determinar los valores, pero sólo tiene que inicializar una vez, puede utilizar perezoso-inicialización ...

Private mstrPath1 As String 
Private mstrPath2 As String 

Public Function Path1() As String 
    if mstrPath1 = vbNullString Then 
     ' Initialize mstrPath1 value here. 
    End If 
    Path1 = mstrPath1 
End Function 

Public Function Path2() As String 
    if mstrPath2 = vbNullString Then 
     ' Initialize mstrPath2 value here. 
    End If 
    Path2 = mstrPath2 
End Function 

Lo bueno aquí es que si su código alguna vez se restablece, los valores simplemente vuelven a inicializarse la próxima vez que acceda a ellos a través de sus funciones respectivas.

Tenga en cuenta que las variables globales deben evitarse tanto como sea posible, y siempre debe preferir las variables globales privadas sobre las públicas siempre que sea posible. Usa los globales y los globales cuando sea necesario, pero solo cuando sea necesario.

+0

¡Ahh, gracias! No estaba al tanto de las constantes antes. –