2012-03-27 21 views
6

Mam projekt VBA z modułem i formularzem użytkownika. Chcę użyć niektórych zmiennych z mojego modułu w mojej Userform.Czy istnieje sposób na wykorzystanie zmiennych lokalnych w modułach?

Czy muszę globalnie deklarować te zmienne? Nie lubię zmiennych globalnych, ponieważ pozostają one w pamięci po wykonaniu kodu i muszę resetować te zmienne jeden po drugim na początku mojego makra. Nie mogę użyć słowa kluczowego End, aby wyczyścić zmienne z pamięci, ponieważ muszę pamiętać jedną lub dwie z tych zmiennych. Jak zwykle ludzie robią?

Edycja: czy istnieje sposób przekazania zmiennej z Userform do modułu bez tworzenia zmiennej globalnej?

Odpowiedz

6

Utwórz właściwość publiczną w formularzu userform i przekaż zmienną do formularza za pomocą właściwości. Useforms to tylko moduł klasy, z tym wyjątkiem, że mają komponent interfejsu użytkownika. Przykład: W module kodu Twojego UserForm za

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 

A w standardowym module

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

doskonały, dzięki! – Cutter

+0

Czy jest możliwe przekazanie zmiennej z Userform do modułu bez tworzenia zmiennej globalnej? – Cutter

1

Jednym ze sposobów można to zrobić byłoby zadeklarować zmienne publiczne tak:

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

Ale jeśli nie preferują ten sposób można wstawić nowy arkusz Excel, ustawić właściwości nowego arkusz do "2 - xlSheetVeryHidden" i możesz zapisać swoje wartości w komórkach tego arkusza i odczytać je z UserForm.

Więc nie będziesz miał żadnych zmiennych globalnych, ale wszystkie wartości są na tym arkuszu. Następnie możesz usunąć wartości z tego arkusza, jeśli potrzebujesz.

Powiązane problemy