2012-03-27 107 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”,并且您可以在该工作表的单元格中写入值并从用户窗体读取它们。

所以你不会有任何全局变量,但所有的值都在该表。然后,如果需要,可以从该表中取出值。

相关问题