过滤填充的列表框并保留多个选择
Filter populated listbox and keep multiple selections
上下文
我为我们公司的生产部门制定了维护计划。作为额外的补充,我们想登记他们使用了哪些备件以及使用了多少备件。这个部门有四台机器。每台机器在 Excel 中都有自己的维护计划。
说明应用
我制作了一个外部中央列表,由 Set myData = Workbooks.Open("Hyperlink")
打开。该清单包含机器的所有备件。我将此列表放在外部,因为机器的操作员还需要能够添加额外的零件。
然后我用外部列表中的所有备件填充一个列表框。填充列表框后,我关闭外部列表,以便其他人可以打开该列表。下图显示了用户窗体的外观。列表框现在充满了虚拟产品,因为我仍在测试它。
机器操作员需要能够select多个备件。
问题
我希望操作员能够过滤列表框,同时select多个备件。这就是它变得棘手的地方。
我知道如何过滤列表框,但我的方法每次都会重置列表框,因此无法 select 多个产品。我看过一些关于堆栈溢出的其他主题,但他们有同样的问题。
问题
有什么方法可以过滤列表框,select 一个项目,再次过滤,select 另一个项目,再次过滤,select 另一个项目等等?
*在没有源 sheet 打开
的情况下过滤填充的列表框
提前谢谢你。
This topic deletes all the items from the listbox
在@JvdV 的帮助下,我解决了部分问题。他的 solution 确保我可以 select 一些产品并节省 selection。这使我能够为过滤列表框的文本框添加一些代码。此代码通过删除不等于文本框的所有内容来过滤填充的列表框。
当文本框被清空到 ""
时,列表框将被重置并再次填充。请参阅下面的整个代码;
Private Sub FilterProdNr_Change()
For i = UsedPart.ListCount - 1 To 0 Step -1
If InStr(1, UsedPart.List(i), FilterProdNr) = 0 Then UsedPart.RemoveItem (i)
Next i
If FilterProdNr = "" Then
UsedPart.Clear
Dim myData As Workbook
Dim cProd As Range
Dim ws As Worksheet
Set myData = Workbooks.Open("Hyperlink")
Set ws = Worksheets("OnderhoudPartsCentraal")
For Each cProd In ws.Range("Product_nummer")
With Me.UsedPart
.AddItem cProd.Value & " <> " & cProd.Offset(0, 1).Value
End With
Next cProd
myData.Close
End If
End Sub
上下文
我为我们公司的生产部门制定了维护计划。作为额外的补充,我们想登记他们使用了哪些备件以及使用了多少备件。这个部门有四台机器。每台机器在 Excel 中都有自己的维护计划。
说明应用
我制作了一个外部中央列表,由 Set myData = Workbooks.Open("Hyperlink")
打开。该清单包含机器的所有备件。我将此列表放在外部,因为机器的操作员还需要能够添加额外的零件。
然后我用外部列表中的所有备件填充一个列表框。填充列表框后,我关闭外部列表,以便其他人可以打开该列表。下图显示了用户窗体的外观。列表框现在充满了虚拟产品,因为我仍在测试它。
机器操作员需要能够select多个备件。
问题
我希望操作员能够过滤列表框,同时select多个备件。这就是它变得棘手的地方。
我知道如何过滤列表框,但我的方法每次都会重置列表框,因此无法 select 多个产品。我看过一些关于堆栈溢出的其他主题,但他们有同样的问题。
问题
有什么方法可以过滤列表框,select 一个项目,再次过滤,select 另一个项目,再次过滤,select 另一个项目等等? *在没有源 sheet 打开
的情况下过滤填充的列表框提前谢谢你。
This topic deletes all the items from the listbox
在@JvdV 的帮助下,我解决了部分问题。他的 solution 确保我可以 select 一些产品并节省 selection。这使我能够为过滤列表框的文本框添加一些代码。此代码通过删除不等于文本框的所有内容来过滤填充的列表框。
当文本框被清空到 ""
时,列表框将被重置并再次填充。请参阅下面的整个代码;
Private Sub FilterProdNr_Change()
For i = UsedPart.ListCount - 1 To 0 Step -1
If InStr(1, UsedPart.List(i), FilterProdNr) = 0 Then UsedPart.RemoveItem (i)
Next i
If FilterProdNr = "" Then
UsedPart.Clear
Dim myData As Workbook
Dim cProd As Range
Dim ws As Worksheet
Set myData = Workbooks.Open("Hyperlink")
Set ws = Worksheets("OnderhoudPartsCentraal")
For Each cProd In ws.Range("Product_nummer")
With Me.UsedPart
.AddItem cProd.Value & " <> " & cProd.Offset(0, 1).Value
End With
Next cProd
myData.Close
End If
End Sub