2

我有一个带有基本组合框和命令按钮的用户窗体。当用户点击命令按钮时,我希望关闭用户窗体,并将组合框的值保存在一个变量中,该变量可由“ThisWorkbook”中包含的子例程访问。

在用户窗体代码中:

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()”运行时,用户窗体出现,您可以在组合框中选择一个值并按下命令按钮,但是当 MsgBox 出现时,它显示“”(无)

我在这里做错了什么?

4

2 回答 2

3

当 you 时Unload Me,我认为您会丢失与模块相关的所有信息(包括全局变量)。但是如果您使用 Me.Hide 而不是 Me.Unload,那么您可以在例程返回后访问表单的值。所以试试这个:

-- 用户表单代码包括:

Public Sub CommandButton1_Click()
    Me.Hide
End Sub

-- 主要模块包括:

Private Sub GetUserFormValue()
    Call Userform_Initialize
    EmployeePosition.Show
    MsgBox EmployeePosition.ComboBox1.Value
    Unload EmployeePosition
End Sub

我认为这应该有效。

于 2013-01-26T05:10:08.463 回答
2

我遇到了同样的问题,这就是我解决它的方法:

如果主代码在工作表中,并且该变量在该工作表中声明为公共(例如在 Microsoft Excel 对象 -> Sheet1 (Sheet1) 中),则“卸载我”的结果不能从用户窗体传递到工作表代码.

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

我希望这也适用于你!

安德鲁

于 2014-05-02T13:45:01.740 回答