2012-03-27 55 views
6

我有一個模塊和用戶窗體的VBA項目。我想在我的用戶窗體中使用我的模塊中的一些變量。有沒有辦法跨模塊使用局部變量?

是否有必要在全局聲明這些變量?我不喜歡全局變量,因爲它們在代碼執行後留在內存中,我必須在宏的開始處逐個重置這些變量。我不能使用關鍵字End來清除內存中的變量,因爲我需要記住這些變量中的一個或兩個。人們通常如何做?

編輯:有沒有辦法通過從用戶窗體到模塊的變量,而無需創建一個全局變量?你可以這樣做

回答

6

在您的用戶表單中創建一個公共屬性,並使用該屬性將該變量傳遞給表單。 Useforms只是類模塊,只是它們有一個用戶界面組件。例如:在您的用戶窗體的代碼模塊

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 

,並以標準模塊

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

完美,謝謝! – Cutter 2012-03-27 15:16:31

+0

是否可以將用戶窗體中的變量傳遞給模塊而不創建全局變量? – Cutter 2012-03-29 22:15:03

1

一種方法是聲明公共變量是這樣的:

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

但是,如果你不喜歡這種方式,你可以插入一個新的Excel表,設置新的屬性工作表添加到「2 - xlSheetVeryHidden」,並且您可以在該工作表的單元格中寫入值並從用戶窗體讀取它們。

所以你不會有任何全局變量,但所有的值都在該表。然後,如果需要,可以從該表中取出值。

相關問題