VBA_Combobox 无法显示列表

VBA_Combobox can not show the list

我做了一个ComboBox来选择学生的名字。 但是当我点击三角按钮显示名字列表时,选择区域是空的:

但是当我点击一些字母时,列表出现了:

名单还在不断增加名字,所以它变得越来越长。

代码如下:

Private Sub ComboBox1_Change()

Dim MyArray As Variant
Dim Ctr As Integer
Dim listvar As Variant

MyArray = Array("Denis", "Daniel", "Jimmy", "David", "Eric")
For Ctr = LBound(MyArray) To UBound(MyArray)
    UserForm1.ComboBox1.AddItem MyArray(Ctr)
Next

listvar = ComboBox1.List

On Error Resume Next
If IsError(WorksheetFunction.Match(ComboBox1.Value, listvar, 0)) Then

    ComboBox1.AddItem ComboBox1.Value
End If

Operateur = ComboBox1.Text
UserForm1.Show

End Sub

此外,当我输入一个新名字,比如 Mary,列表会记住我点击的每个字母,比如 M、Ma、Mar、Mary。

所以我只想当我点击三角形按钮时,它可以显示我要选择的名字,当我写一个新名字时,它可以将它放入列表中(不重复名字)。谢谢!

当用户窗体显示 UserFormInitialize event 而不是 ComboBoxChange event 时,您需要更早地向组合框添加值。 尝试这样的事情:

Private Sub UserForm_Initialize()

Dim MyArray As Variant
Dim Ctr As Integer
Dim listvar As Variant

MyArray = Array("Denis", "Daniel", "Jimmy", "David", "Eric")
For Ctr = LBound(MyArray) To UBound(MyArray)
    UserForm1.ComboBox1.AddItem MyArray(Ctr)
Next

End Sub

结束 从您的 ComboBox1_Change() 活动中删除此部分。


编辑,如何使用 KeyDown 事件与 Enter 按钮一起工作的简单示例:

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        Me.ComboBox1.AddItem Me.ComboBox1.Value

    End If
End Sub