当我有值时,如何获取组合框中项目的 ListIndex,以便我可以从具有相同列表的列表框中删除该项目?

How do I get the ListIndex of an Item in a Combobox when I have the Value, so I can remove the Item from a ListBox with the same list?

我有一个列表框 SkuList,其列表等于单独的组合框 SkuBox 的列表。我想要做的是从列表框 SkuList.

中删除为组合框 SkuBox 选择的值
Private Sub UserForm_Activate()

Dim Esh As Worksheet
Set Esh = ThisWorkbook.Sheets("Result")
Dim r_sku As Range

If Esh.Range("A2") <> "" Then
For Each r_sku In Esh.Range("A2", Esh.Range("A2").End(xlDown))
    Me.SkuBox.AddItem r_sku.Value
Next r_sku
End If

Me.SkuList.List = Me.SkuBox.List
End Sub

Private Sub SkuBox_Change()
Me.SkuList.List = Me.SkuBox.List
Me.SkuList.RemoveItem (SkuBox.Value)
End Sub

关于删除项目的最后一节不起作用,因为 .RemoveItem 需要 ListIndex。我的问题是,如何获取 SkuBox.Value?

的 ListIndex

您可以使用 ListIndex,但这在控件之间并不准确。一旦您开始删除项目,SkuList 和 SkuBox 中项目的索引就会不同。

我的 VBA 还没准备好,但我没有看到任何 ID 属性,因此您需要按照说明进行操作。循环并按文本查找项目。

以下应该可行,但我的建议是进入并尝试一下。如果您调试并单步执行代码,智能感知将为您提供大量信息,您可以使用这些信息来发现属性并弄清楚如何做事。

Private Sub SkuBox_Change()

  Dim selectedSkuBoxValue As String
  selectedSkuBoxValue = SkuBox.Value

  SkuList.ListIndex = -1

  Dim listItem
  For Each listItem In SkuList.List
      If listItem = selectedSkuBoxValue Then
          SkuList.Value = selectedSkuBoxValue
          Exit For
      End If
  Next listItem

  If SkuList.ListIndex > -1 Then
      SkuList.RemoveItem SkuList.ListIndex
  End If

End Sub