我有一个带有基本组合框和命令按钮的用户表单。当用户点击命令按钮时,我想要关闭UserForm,并将组合框的值保存在一个变量中,该变量可以被“ThisWorkbook”中包含的子程序访问。
在UserForm代码中:
Public employee_position As String
Public Sub CommandButton1_Click()
employee_position = Me.ComboBox1.Value
Unload Me
End Sub
在“ThisWorkbook”代码中
Private Sub GetUserFormValue()
Call Userform_Initialize
EmployeePosition.Show
MsgBox employee_position
End Sub
当“GetUserFormValue()”运行时,UserForm出现,您可以在组合框中选择一个值并按下命令按钮,但当MsgBox出现时,它会显示“”(Nothing)
我在这里做错了什么?
答案 0 :(得分:3)
当你Unload Me
时,我认为你丢失了与模块相关的所有信息(包括全局变量)。但是如果你使用Me.Hide而不是Me.Unload,那么你可以在例程返回后访问表单的值。所以试试这个:
- userform代码包括:
Public Sub CommandButton1_Click()
Me.Hide
End Sub
- 主要模块包括:
Private Sub GetUserFormValue()
Call Userform_Initialize
EmployeePosition.Show
MsgBox EmployeePosition.ComboBox1.Value
Unload EmployeePosition
End Sub
我认为这应该有用。
答案 1 :(得分:2)
我遇到了同样的问题,这就是我解决问题的方法:
如果主代码在工作表中,并且该变量在该工作表中声明为public(例如在Microsoft Excel Objects - > Sheet1(Sheet1)中),则结果来自"卸载我"无法从UserForm传递到工作表代码。
所以为了解决我的问题,我插入了一个新模块,并在那里声明了我的公共变量。我甚至不必将代码从工作表移动到模块......只是公共变量的声明。
我希望这也适合你!
安德鲁