上下文
我已经为公司的生产部门制定了维护计划。作为额外的补充,我们要注册他们使用哪些备件以及多少备件。这个部门有四台机器。每台机器都有自己的Excel维护计划。
描述应用
我创建了一个外部中央列表,并由Set myData = Workbooks.Open("Hyperlink")
打开。该列表包含机器的所有备件。我将此清单设为外部清单,因为机器的操作员还需要能够添加其他零件。
然后,我用外部列表中的所有备件填充列表框。填充列表框后,我关闭了外部列表,以便其他人可以打开列表。下图显示了用户窗体的外观。列表框现在充满了虚拟产品,因为我仍在对其进行测试。
机器的操作员需要能够选择多个备件。
问题
我希望操作员能够过滤列表框,并同时选择多个备用零件。这是棘手的地方。
我知道如何过滤列表框,但是我的方法每次都会重置列表框,因此无法选择多个产品。我看过关于堆栈溢出的其他主题,但是它们有相同的问题。
问题
有没有办法我可以过滤列表框,选择一个项目,再次过滤,选择另一个项目,再次过滤,再次选择另一个项目等? *在不打开源工作表的情况下过滤填充的列表框
先谢谢您。
This topic needs the list to remain open and resets the listbox eache time
答案 0 :(得分:0)
在@JvdV的帮助下,我解决了部分问题。他的solution确保我可以选择一些产品并保存选择。这使我能够为过滤列表框的文本框添加一些代码。此代码通过删除不等于文本框的所有内容来过滤填充的列表框。
将文本框清空为""
后,列表框将重置并再次填充。参见下面的完整代码;
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