Excel VBA-将UserForm组合框中的值指定给全局变量
我有一个带有基本组合框和命令按钮的用户表单。当用户点击命令按钮时,我希望UserForm关闭,combobox的值保存在一个变量中,该变量可由包含在此工作簿中的子例程访问 在用户表单代码中: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
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设置公共变量时,它都会清空自身。将其添加到工作簿或工作表中并没有任何区别。这很有效。