【发布时间】:2012-03-27 12:05:08
【问题描述】:
我有一个带有模块和用户窗体的 VBA 项目。我想在我的用户表单中使用我的模块中的一些变量。
是否有必要在全局范围内声明这些变量?我不喜欢全局变量,因为它们在代码执行后会留在内存中,而且我必须在宏开始时一一重置这些变量。我不能使用 End 关键字从内存中清除变量,因为我需要记住其中的一两个变量。人们通常是怎么做的?
编辑:有没有办法在不创建全局变量的情况下将变量从用户窗体传递到模块?
【问题讨论】:
我有一个带有模块和用户窗体的 VBA 项目。我想在我的用户表单中使用我的模块中的一些变量。
是否有必要在全局范围内声明这些变量?我不喜欢全局变量,因为它们在代码执行后会留在内存中,而且我必须在宏开始时一一重置这些变量。我不能使用 End 关键字从内存中清除变量,因为我需要记住其中的一两个变量。人们通常是怎么做的?
编辑:有没有办法在不创建全局变量的情况下将变量从用户窗体传递到模块?
【问题讨论】:
在您的用户表单中创建一个公共属性,并使用该属性将变量传递到表单中。 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
【讨论】:
您可以这样做的一种方法是像这样声明公共变量:
Public strvar as String
Sub Abfrage()
'Your Code
End Sub
但如果您不喜欢这种方式,您可以插入一个新的 Excel 工作表,将新工作表的属性设置为“2 - xlSheetVeryHidden”,然后您可以在该工作表的单元格中写入值并读取它们从您的用户窗体中。
因此您将没有全局变量,但所有值都在该表上。然后,如果需要,您可以从该表中取出值。
【讨论】: