如何正确初始化和提取Listbox值-Userform VBA

如何正确初始化和提取Listbox值-Userform VBA,vba,listbox,userform,Vba,Listbox,Userform,我有一个Userform,我希望用户在两个列表框中各选择一个单词,然后将它们保存在一个表中。用户也可以(理论上)保留预先选择的单词。以下是我编写的代码: Private Sub UserForm_Activate () With ListBox1 'This list is about the stake .AddItem "Essential" .AddItem "Important" .AddItem "Not interesting" End With 'then I try to in

我有一个Userform,我希望用户在两个列表框中各选择一个单词,然后将它们保存在一个表中。用户也可以(理论上)保留预先选择的单词。以下是我编写的代码:

Private Sub UserForm_Activate ()

With ListBox1 'This list is about the stake
.AddItem "Essential"
.AddItem "Important"
.AddItem "Not interesting"
End With
'then I try to initialize the value of the stake. 
ListBox1.Value = "Important"

With ListBox2 'This is a second list, about priority
.AddItem "Auto"
.AddItem "Yes"
.AddItem "No"
End With
'then I try to initialize the value of the priority
Listbox2.Value="Yes"

End sub ()
但我的问题是,即使这两个列表似乎已正确初始化(当我运行UserForm时,列表中突出显示了正确的单词),我也无法提取其中一个列表的值。当我运行以下代码时:

Private Sub CommandButton2_Click()
Feuil1.Cells(1,1)=Listbox1.Value
Feuil1.Cells(1,2)=Listbox2.Value
End sub ()
Excel能够提取Listbox2的值(优先级):“是”,但不能提取Listbox1的值(桩):“重要”我不明白为什么代码对其中一个有效,但对另一个无效

还有一个元素:如果我在列表中手动选择一个单词,那么Excel可以为我提供两个listbox的值


有什么线索吗?

试试这个,它对我很管用

Private Sub CommandButton2_Click()
Feuil1.Cells(1,1)=Listbox1.Value
Feuil1.Cells(1,2)=Listbox2.Value
Unload Me
End sub 

试试这个,它对我很管用

Private Sub CommandButton2_Click()
Feuil1.Cells(1,1)=Listbox1.Value
Feuil1.Cells(1,2)=Listbox2.Value
Unload Me
End sub 

如何获取列表框的当前值

似乎
.Value
属性可以识别正确的列表行,但不会对第二个列表框作出反应,除非它获得焦点或手动激活。 因此,一个粗暴的(不推荐的)解决方法是,每次您也必须获得第二个列表框的当前值时,设置焦点。 (在一定程度上,这似乎是一种神经折磨,可以永久性地选择或激活细胞,而不是推荐的直接参考完全合格的范围。)

不过,使用Listboxs的.List属性是肯定的。
.ListIndex
作为第一个参数,通过基于零的索引指示当前“行”(0等于行1,1等于第二行,以此类推); 第二个参数
0
表示行索引(即列
1
;顺便说一句,这里只有一个)


如何获取列表框的当前值

似乎
.Value
属性可以识别正确的列表行,但不会对第二个列表框作出反应,除非它获得焦点或手动激活。 因此,一个粗暴的(不推荐的)解决方法是,每次您也必须获得第二个列表框的当前值时,设置焦点。 (在一定程度上,这似乎是一种神经折磨,可以永久性地选择或激活细胞,而不是推荐的直接参考完全合格的范围。)

不过,使用Listboxs的.List属性是肯定的。
.ListIndex
作为第一个参数,通过基于零的索引指示当前“行”(0等于行1,1等于第二行,以此类推); 第二个参数
0
表示行索引(即列
1
;顺便说一句,这里只有一个)


我无法重现你的问题。命令按钮将单元格a1和b1的值设置为userform的ListBoxes中的选定值。您无法重现该问题并不奇怪,因为它似乎没有意义。现在Excel无法提取的值已经改变,现在无法提取的是listbox2(优先级)。不知道为什么这样做不起作用并毁掉我的整个(以及更复杂的)代码/项目是非常令人沮丧的!谢谢你的努力@videorama17-发布了您问题的答案,希望它有助于识别列表框值:-)我无法重现您的问题。命令按钮将单元格a1和b1的值设置为userform的ListBoxes中的选定值。您无法重现该问题并不奇怪,因为它似乎没有意义。现在Excel无法提取的值已经改变,现在无法提取的是listbox2(优先级)。不知道为什么这样做不起作用并毁掉我的整个(以及更复杂的)代码/项目是非常令人沮丧的!谢谢你的努力@videorama17-发布了您问题的答案,希望它能帮助识别ListBox值:-)感谢您的帮助,但我不想卸载userform,因为这是一个更大、更复杂的代码的一部分,以后还需要运行。感谢您的帮助,但我不想卸载userform,因为这是一个更大、更复杂的代码的一部分,仍然需要运行之后再跑。谢谢!我尝试了ListIndex方法,它很有效!非常感谢你!非常感谢。我尝试了ListIndex方法,它很有效!非常感谢你!
Private Sub CommandButton2_Click()
Feuil1.Range("A1:B1") = vbNullString
With Me.ListBox1
    If .Listindex >-1 then Feuil1.Cells(1, 1) = .List(.ListIndex, 0)
End With
With Me.ListBox2
    If .Listindex >-1 then Feuil1.Cells(1, 2) = .List(.ListIndex, 0)
End With