您可以使用userforms执行大量信息和许多信息,但我无法找到使用它们的标准方法。假设我有一个带有标准下拉列表的用户表单,要求某人选择一个水果。在userform代码中,我将在添加名为fruitcombo
:
Private Sub UserForm_Initialize()
userform1.fruitcombo.AddItem "Peach"
userform1.fruitcombo.AddItem "Pear"
userform1.fruitcombo.AddItem "Grape"
End Sub
我还将添加一个命令按钮,该按钮将被标记为"Submit"
并且在那个事件中:
Private Sub Submit_Click()
Me.Hide
End Sub
这就是它开始变得朦胧的地方。捕获所选答案的最佳方法是什么?我可以想到的一种方法是创建一个名为fruitanswer的全局变量,然后我们可以直接跳到Me.Hide
而不是Unload Me
例如:
Private Sub Submit_Click()
fruitanswer = fruitcombo.value
Unload Me
End Sub
或者我们可以在调用userform的模块中将fruitanswer
作为私有变量,然后在那里卸载它。还有多种方法可以初始化用户表单。我也想知道初始化它的最佳方法。 Show
方法会自动初始化它,但Hide
方法不会自动取消初始化它。为此,Unload
声明是必要的。那么在使用Show
语句调用Load
方法之前,是否有人初始化它?
例如:
Load userform1 'Any point to including this?
userform1.show
'user chooses a fruit and clicks submit button
'userform is hidden by commandbutton but not unloaded yet
fruitanswer = fruitcombo.value
Unload userform1
在这些选项中,哪种方法最好?还有什么可以让它更有效率吗?
答案 0 :(得分:1)
您可以将整个事物包装在一个函数调用中:
strFruit = UserForm1.GetFruit()
然后,在你的UserForm
中,让它自己完成显示和卸载的工作:
Private bOK As Boolean
Public Function GetFruit() As String
bOK = False
Me.Show vbModal
If bOK Then GetFruit = ComboBox1.Text
Unload Me
End Function
Private Sub cmdOK_Click()
bOK = True
Me.Hide
End Sub
Private Sub cmdCancel_Click()
Me.Hide
End Sub
这假设您有名为cmdOK
和cmdCancel
的按钮以及名为ComboBox1
的组合框。
由于Show()
是以模态方式调用的,因此在它关闭或隐藏表单之前,代码将不会执行。当单击任一按钮(或通过其他方式关闭表单)时,代码将继续,将返回所选文本(如果单击OK
),并且表单将自行卸载。
这样做的好处在于,你的调用代码并不需要担心每次调用时都会实例化并破坏表单。它只是一个加载表单并获得返回值的语句。
当然,您需要添加代码以使用您希望显示的任何项目填充组合框。