Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-将UserForm组合框中的值指定给全局变量_Vba_Variables_Global_Userform - Fatal编程技术网

Excel VBA-将UserForm组合框中的值指定给全局变量

Excel VBA-将UserForm组合框中的值指定给全局变量,vba,variables,global,userform,Vba,Variables,Global,Userform,我有一个带有基本组合框和命令按钮的用户表单。当用户点击命令按钮时,我希望UserForm关闭,combobox的值保存在一个变量中,该变量可由包含在此工作簿中的子例程访问 在用户表单代码中: Public employee_position As String Public Sub CommandButton1_Click() employee_position = Me.ComboBox1.Value Unload Me End Sub 在这个工作簿代码中 Pri

我有一个带有基本组合框和命令按钮的用户表单。当用户点击命令按钮时,我希望UserForm关闭,combobox的值保存在一个变量中,该变量可由包含在此工作簿中的子例程访问

在用户表单代码中:

Public employee_position As String    
Public Sub CommandButton1_Click()

    employee_position = Me.ComboBox1.Value
    Unload Me

End Sub
在这个工作簿代码中

Private Sub GetUserFormValue()
    Call Userform_Initialize
    EmployeePosition.Show
    MsgBox employee_position
End Sub
当GetUserFormValue运行时,会出现UserForm,您可以在组合框中选择一个值并按下命令按钮,但当MsgBox出现时,它不会显示任何内容

我做错了什么?

当您卸载我时,我认为您丢失了与模块相关的所有信息,包括全局变量。但是如果使用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
-主要模块包括:

Public Sub CommandButton1_Click()
    Me.Hide
End Sub
Private Sub GetUserFormValue()
    Call Userform_Initialize
    EmployeePosition.Show
    MsgBox EmployeePosition.ComboBox1.Value
    Unload EmployeePosition
End Sub

我想这应该行得通。

我也有同样的问题,我就是这样解决的:

如果主代码位于工作表中,并且该变量在该工作表中声明为公共变量,例如在Microsoft Excel Objects->Sheet1 Sheet1中,则“卸载我”的结果无法从用户表单传递到工作表代码

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

我希望这对你也有用


Andrew

将全局变量放在ThisWorkbook模块中,而不是表单模块中。如果我将全局变量移动到ThisWorkboox模块中,结果是相同的:employee_position=在常规模块中如何?如果我这样做,我会得到变量的intellisense,但如果它在该工作簿中,则不会。您真正应该做的是声明一个userform实例并将选择返回到调用例程,如专业Excel开发中所述。我的博客上的这篇文章可能很有趣:我只是关注了@Douglancy的链接,看到他基本上做了我在回答中建议的事情:隐藏表单,在调用例程中处理变量,卸载。这是一个不明显的回答。每次我从UserForm设置公共变量时,它都会清空自身。将其添加到工作簿或工作表中并没有任何区别。这很有效。