从ComboBox中删除所有项目?

21

如何在VBA中以编程方式从组合框中删除所有项?

12个回答

33

以下为伪代码(已更新为实际代码):

Do While ComboBox1.ListCount > 0
    ComboBox1.RemoveItem (0)
Loop

基本上,只要ComboBox中还有项,就删除第一项。当所有项都被删除(计数=0)时,您的ComboBox就为空。

方法2:更好的做法

ComboBox1.Clear

抱歉,VBA没有为组合框控件提供清晰的方法。 - Sham Yemul
2
@Sham Yemul:我可以确认ComboBox.Clear确实有效,至少在Excel 2010上的ActiveX ComboBox控件中。 - Aaron
你使用的 Excel 版本是什么,因为在 2016 年版本中 Clear 对我有效。 - SandPiper
1
Access 365版本中,ComboBox和ListBox没有.Clear方法,但是lst.RowSource = vbNullString可以删除所有项目。否则,Do ... Loop对我来说似乎是最好的解决方法。 - martin.lindenlauf

30

不幸的是,您需要逐个删除每个项目:

       For i = 1 To ListBox1.ListCount

           'Remove an item from the ListBox using ListBox1.RemoveItem 
       Next i

更新 - 我不知道为什么我的答案没有包含完整的解决方案:

For i = ListBox1.ListCount - 1 to 0 Step - 1 
        ListBox1.RemoveItem i 
Next i 

1
只是指出(像个白痴一样苦苦挣扎后)你每次都在删除顶部项。如果你试图将其设置为“i”,那么你会在中途得到一个美妙的越界错误。 - PsychoData
1
@PsychoData 的意思是你可以使用 For i = ListBox1.ListCount to 1 Step -1,这样应该可以正常工作。 - ptpaterson
使得 For i = ListBox1.ListCount - 1 to 0 Step -1 ListBox1.RemoveItem i Next - ptpaterson

13

最简单的方法:

Combobox1.RowSource = ""  'Clear the list
Combobox1.Clear           'Clear the selected text

6
您可以使用ControlFormat方法:
ComboBox1.ControlFormat.RemoveAllItems

4

最佳方式:

Combobox1.items.clear();

2

对于Access VBA,如果ComboBox已经使用Value List的Row Source Type填充,则我发现以下内容有效:

ComboBox.RowSource = ""

1
对于没有在用户窗体组合框上提供 .clear 方法的 Access VBA,这个解决方案对我来说非常完美:
   If cbxCombobox.ListCount > 0 Then
        For remloop = (cbxCombobox.ListCount - 1) To 0 Step -1
            cbxCombobox.RemoveItem (remloop)
        Next remloop
   End If

当组合框源设置为值列表时,此方法才有效。 - Elliott Addi

0
在Access 2013中,我刚刚测试了这个:
While ComboBox1.ListCount > 0
    ComboBox1.RemoveItem 0
Wend

有趣的是,如果你在属性中设置了项目列表,在退出表单视图并返回设计视图时,它不会丢失。

0

me.Combobox1.Clear

这是常用的方法


0

我无法让“清除”(Mac Excel)起作用,但这个可以。

ActiveSheet.DropDowns("CollectionComboBox").RemoveAllItems


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接