excel 如何从用户窗体的组合框中删除项目?

68de4m5k  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(152)

我在工作表中有一个名字列表,我将这些名字设置为useform上组合框的RowSource。
涉及两个组合框。一个开始为满,另一个开始为空。
我希望当我点击一个名称从第一个(完整的)组合框,说名称被添加到其他组合框,并从原来的组合框删除(反之亦然,最终)。
无法使用 RemoveItem 删除任何内容。
我使用“Menu.ListeAjoutAg.ListIndex”的方法来获取当前选择的索引(“* Menu*”是用户窗体,“ListeAjoutAg”是组合框),但它不起作用。
尝试通过一个真实的快速创建的变量“*b *”输入,但结果相同。没有索引号工作。我检查了一下,我只提供了正确的和/或在我的列表范围内的函数整数(0,1,3,4...)(大约45个名称)。

Private Sub ListeAjoutAg_Change()
    a = Menu.ListeAjoutAg.Text
    b = Menu.ListeAjoutAg.ListIndex
    Menu.ListeRetirer.AddItem (a) ' goes fine till there
    Menu.ListeAjoutAg.RemoveItem (b) 'and here it goes wrong
    Menu.ListeRetirer.Enabled = True
    Menu.ListeRetirer.Visible = True
End Sub

kknvjkwl

kknvjkwl1#

如前所述:如果设置了Rowsource属性,则无法在列表框中添加或删除项目。
然而,从一个范围填充列表框是相当容易的--只需将单元格值复制到一个数组中,并将该数组指定为List
将以下例程放入窗体中,并从窗体Activate事件调用它。

Private Sub fillListBox(r As Range)
    Me.ListeAjoutAg.Clear
    Me.ListeAjoutAg.ColumnCount = r.Columns.Count
    
    Dim data
    data = r.Value
    Me.ListeAjoutAg.List = data
End Sub

Private Sub UserForm_Activate()
    Dim r As Range
    ' Replace this with the range where your data is stored.
    Set r = ThisWorkbook.Sheets(1).Range("A2:C10") 
    fillListBox r
End Sub

相关问题