Excel VBA - 将UserForm ComboBox中的值分配给全局变量

时间:2013-01-25 20:49:06

标签: vba variables global userform

我有一个带有基本组合框和命令按钮的用户表单。当用户点击命令按钮时,我想要关闭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)

我在这里做错了什么?

2 个答案:

答案 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传递到工作表代码。

所以为了解决我的问题,我插入了一个新模块,并在那里声明了我的公共变量。我甚至不必将代码从工作表移动到模块......只是公共变量的声明。

我希望这也适合你!

安德鲁