Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 筛选填充的列表框并保留多个选择_Excel_Vba_Filter_Listbox - Fatal编程技术网

Excel 筛选填充的列表框并保留多个选择

Excel 筛选填充的列表框并保留多个选择,excel,vba,filter,listbox,Excel,Vba,Filter,Listbox,上下文 我已经为我们公司的一个生产部门制定了维护计划。作为额外的补充,我们想登记他们使用的备件和数量。这个部门有四台机器。每台机器都有自己的Excel维护计划 说明应用程序 我制作了一个外部中心列表,通过Set myData=Workbooks.open(“Hyperlink”)打开该列表。此清单包含机器的所有备件。我将此列表列在外部,因为机器的操作员还需要能够添加额外的零件。 然后,我用外部列表中的所有备件填充一个列表框。填充列表框后,我关闭外部列表,以便其他人可以打开该列表。下图显示了use

上下文

我已经为我们公司的一个生产部门制定了维护计划。作为额外的补充,我们想登记他们使用的备件和数量。这个部门有四台机器。每台机器都有自己的Excel维护计划

说明应用程序

我制作了一个外部中心列表,通过
Set myData=Workbooks.open(“Hyperlink”)
打开该列表。此清单包含机器的所有备件。我将此列表列在外部,因为机器的操作员还需要能够添加额外的零件。 然后,我用外部列表中的所有备件填充一个列表框。填充列表框后,我关闭外部列表,以便其他人可以打开该列表。下图显示了userform的外观。列表框现在充满了虚拟产品,因为我还在测试它

机器操作员需要能够选择多个备件

问题

我希望操作员能够过滤列表框,同时选择多个备件。这就是它变得棘手的地方

我知道如何过滤列表框,但我的方法每次都会重置列表框,因此无法选择多个产品。我已经看了一些关于堆栈溢出的其他主题,但它们也有相同的问题

问题

有什么方法可以过滤列表框、选择一个项目、再次过滤、选择另一个项目、再次过滤、再次选择另一个项目等? *在不打开源工作表的情况下筛选填充的列表框

先谢谢你


在@JvdV的帮助下,我解决了部分问题。His确保我可以选择一些产品并保存选择。这使我能够为过滤列表框的文本框添加一些代码。此代码通过删除与文本框不相等的所有内容来过滤填充的列表框

当文本框被清空到
时,列表框被重置并再次填充。请参阅下面的全部代码

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
Private Sub FilterProdNr_Change()
对于i=UsedPart.ListCount-1到0步骤-1
如果InStr(1,UsedPart.List(i),FilterProdNr)=0,则UsedPart.RemoveItem(i)
接下来我
如果FilterProdNr=“”,则
用过了,明白了
将myData设置为工作簿
将cProd变暗为范围
将ws设置为工作表
设置myData=工作簿。打开(“超链接”)
设置ws=工作表(“OnderhoudPartsCentraal”)
对于ws.范围内的每个cProd(“产品编号”)
和我一起。用零件
.AddItem cProd.Value&&cProd.Offset(0,1).Value
以
下一个cProd
我的数据,关闭
如果结束
端接头

在上面/旁边各有两个列表框。使用它们之间的上/左和下/右箭头添加到选定项目或从第二个列表框中删除选定项目。类似的东西看起来很有希望,我会试试看。非常感谢。