2012-03-27 14 views
6

Ho un progetto VBA con un modulo e un modulo utente. Voglio usare alcune variabili dal mio modulo nel mio Userform.Esiste un modo per utilizzare variabili locali tra i moduli?

È necessario dichiarare queste variabili globalmente? Non mi piacciono le variabili globali perché rimangono in memoria dopo l'esecuzione del codice e devo resettare queste variabili una alla volta all'inizio della mia macro. Non riesco a usare la parola chiave End per cancellare le variabili dalla memoria perché ho bisogno di ricordare una o due di queste variabili. Come fanno le persone di solito?

Modifica: c'è un modo per passare una variabile da Userform al modulo senza creare una variabile globale?

risposta

6

Creare una proprietà pubblica nel proprio userform e passare la variabile nel modulo utilizzando la proprietà. Gli useform sono solo moduli di classe, tranne che hanno un componente dell'interfaccia utente. Esempio: Nel modulo di codice del form

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 

E in un modulo standard

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

Perfetto, grazie! – Cutter

+0

È possibile passare una variabile da Userform al modulo senza creare una variabile globale? – Cutter

1

Un modo per farlo sarebbe quello di dichiarare le variabili pubbliche in questo modo:

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

Ma se non si preferisce in questo modo, è possibile inserire un nuovo foglio di Excel, impostare le proprietà del nuovo foglio su "2 - xlSheetVeryHidden" e puoi scrivere i tuoi valori nelle celle di quel foglio e leggerli dal tuo UserForm.

Quindi non ci sono variabili globali, ma tutti i valori si trovano su quel foglio. Quindi, se necessario, puoi estrarre i valori da quel foglio.

Problemi correlati