用户表单组合框列表项+;在VBA Excel中将用户表单值另存为变量
我第一次使用Excel用户表单,遇到了一些问题。本质上,我想让用户输入三个值,然后将这些值保存为vba代码中的变量以供以后使用。最初,我将VBA代码设置为使用三个单独的输入框获取这三个值,但我发现这样拼写错误的情况太多了。相反,我希望用户只是从值列表中选择 下面是盒子的外观: 我只希望那里的两个组合框各有两个选项,它们将始终是相同的选项,因此我不希望将它们放在工作表的列表中,我希望这是VBA代码的一部分。我的userform名为UserFormPYBTMT,组合框名为cboxlBT和cboxlMT,文本框名为tbxxlPY。 这就是我尝试过的:用户表单组合框列表项+;在VBA Excel中将用户表单值另存为变量,vba,excel,combobox,userform,Vba,Excel,Combobox,Userform,我第一次使用Excel用户表单,遇到了一些问题。本质上,我想让用户输入三个值,然后将这些值保存为vba代码中的变量以供以后使用。最初,我将VBA代码设置为使用三个单独的输入框获取这三个值,但我发现这样拼写错误的情况太多了。相反,我希望用户只是从值列表中选择 下面是盒子的外观: 我只希望那里的两个组合框各有两个选项,它们将始终是相同的选项,因此我不希望将它们放在工作表的列表中,我希望这是VBA代码的一部分。我的userform名为UserFormPYBTMT,组合框名为cboxlBT和cboxl
Public Sub UserFormPYBTMT_Initialize()
'fill combobox for BT
userformPYBTMT.cboxlBT.AddItem ("BTChoice1")
userformPYBTMT.cboxlBT.AddItem ("BTChoice2")
'fill combobox for MT
userformPYBTMT.cboxlMT.AddItem ("MTChoice1")
userformPYBTMT.cboxlMT.AddItem ("MTChoice2")
End Sub
---------------------
Public Sub btnxlOK_Click()
End Sub
显然,我还有OK按钮(我还没有为其编写任何代码),此时我希望VBA将组合框值保存为我的变量并关闭userform。我要在其中使用这些值的宏如下所示:
Sub SATV5()
Dim IBPYSAT As Variant
Dim IBMTSAT As Variant
Dim IBBTSAT As Variant
'Show the user form where we get the inputs for PY, MT, BT
userformPYBTMT.Show
IBPYSAT = userformPYBTMT.tbxxlPY.Value
IBMTSAT = userformPYBTMT.cboxlMT.Value
IBBTSAT = userformPYBTMT.cboxlBT.Value
如果对用户表单和组合框有一定了解的人能给我一些建议,我将非常感激。谢谢。您应该将变量声明为公共变量,并且应该
隐藏用户表单,而不是关闭它。请参见以下示例:
Public IBPYSAT As String, IBMTSAT As String, IBBTSAT As String
Private Sub btnxlOK_Click()
'Show the user form where we get the inputs for PY, MT, BT
IBPYSAT = userformPYBTMT.tbxxlPY.Value
IBMTSAT = userformPYBTMT.cboxlMT.Value
IBBTSAT = userformPYBTMT.cboxlBT.Value
userformPYBTMT.Hide
Call MyMacroAfterClosingUserform
End Sub
Sub MyMacroAfterClosingUserform()
MsgBox IBPYSAT & " is my Textbox value and " & IBMTSAT & " and " & IBBTSAT & " are my combobox values!"
Unload userformPYBTMT 'now you can close userform after you are done with the variables!
End Sub
你能澄清一下实际问题是什么吗?你所说的节约是什么意思?您是使用这些值然后放弃,还是尝试永久保存?@jcarroll我想有两个大问题。我如何列出组合框的选项,因为我使用的代码实际上不起作用(当我打开userform时,组合框为空,不显示我的两个选项),以及如何将组合框的值设置为与我的变量相等(这也不起作用)。我将在将来重用userform,那时我想从用户那里获取新值以“保存”或将我的变量设置为。尝试将UserFormPYBTMT\u Initialize()
更改为userform\u Initialize()
,我认为您的代码甚至没有被调用。至于保存值,一旦关闭Excel,就无法在变量中存储值。您需要将它们保存到数据库或工作表中。谢谢,我会尝试的。我不想将它们作为变量长期存储,只想在我的另一个宏中使用它们。我只是想暂时将我的变量设置为组合框的值。@jcarroll好的,UserForm_Initialize()起作用了,太棒了!但我不明白为什么。如果我有多个用户表单,所有这些表单是否都以Sub-UserForm_Initialize()开头?如果变量是公共的,最好卸载表单。我觉得隐藏是不好的。您最终会得到多个相同的实例form@PatrickLepelletier用户表单在完成变量后已关闭。在您的情况下,OP必须声明公共变量并在模块中创建MyMacroAfterClosingUserform
sub,否则当userform关闭时变量将不起作用。