2012-03-27 22 views
6

Tengo un proyecto de VBA con un módulo y una forma de usuario. Quiero usar algunas variables de mi módulo en mi Userform.¿Hay alguna manera de usar variables locales en los módulos?

¿Es necesario que declare estas variables globalmente? No me gustan las variables globales porque permanecen en la memoria después de la ejecución del código, y tengo que restablecer estas variables una a una al comienzo de mi macro. No puedo usar la palabra clave End para borrar las variables de la memoria porque necesito recordar una o dos de estas variables. ¿Cómo suele hacer la gente?

Editar: ¿hay alguna manera de pasar una variable de la forma de usuario al módulo sin crear una variable global?

Respuesta

6

Cree una propiedad pública en su formulario de usuario y pase la variable al formulario usando la propiedad. Las formas de uso son solo módulos de clase, excepto que tienen un componente de interfaz de usuario. Ejemplo: En el módulo de código de su UserForm

Option Explicit 

Private msLocalVar As String 

Public Property Get LocalVar() As String 
    LocalVar = msLocalVar 
End Property 

Public Property Let LocalVar(sLocalVar As String) 
    msLocalVar = sLocalVar 
End Property 

Private Sub CommandButton1_Click() 

    Me.LocalVar = Me.LocalVar & " more strings attached" 

    Me.Hide 

End Sub 

Y en un módulo estándar

Sub ShowForm() 

    Dim sLocalVar As String 
    Dim ufUserForm1 As UserForm1 

    sLocalVar = "Some string" 

    Set ufUserForm1 = New UserForm1 
    ufUserForm1.LocalVar = sLocalVar 'pass in variable 
    ufUserForm1.Show 

    'This executes after the .Hide in the form 
    Debug.Print ufUserForm1.LocalVar 

    'Close out the form - previously just hidden 
    Unload ufUserForm1 

End Sub 
+0

Perfecto, gracias! – Cutter

+0

¿Es posible pasar una variable de Userform al módulo sin crear una variable global? – Cutter

1

Una manera de hacer esto sería declarar variables públicas como esto:

Public strvar as String 
Sub Abfrage() 
'Your Code 
End Sub 

Pero si no se prefiere esta forma, se puede insertar una nueva hoja de Excel, establezca las propiedades del nuevo hoja a "2 - xlSheetVeryHidden" y puede escribir sus valores en las celdas de esa hoja y leerlos desde su UserForm.

Así que no tendrá variables globales, pero todos los valores están en esa hoja. Luego, puede sacar los valores de esa hoja si es necesario.

Cuestiones relacionadas