我正在使用Userform,我有几周时间尝试开发一个代码来根据组合框的值过滤列表框。
我最接近的是制作一个命令按钮来过滤列表框提供的表格,但它不会刷新列表框。
我在论坛上看到人们做了我想要的事情,但我已经尝试了所有这些但没有结果。
Private Sub CommandButton1_Click()
If ComboBox1.Value <> "" Then ActiveSheet.ListObjects("Tabla2").Range.AutoFilter field:=2, Criteria1:=ComboBox1.Value
End Sub
Private Sub CommandButton2_Click()
ActiveSheet.ListObjects("Tabla2").Range.AutoFilter field:=2
End Sub
Private Sub CommandButton3_Click()
Unload UserForm2
UserForm3.Show
End Sub
Private Sub UserForm_Initialize()
For i = 2 To 30
ComboBox1.AddItem Sheets("Proyectos - J.P.").Range("A" & i).Value
Next i
End Sub
2017年4月5日 工作簿链接 https://drive.google.com/open?id=0B4B7v0UZxizCYnY2bVNTNURyLVU
在WorkBook中,您将看到3个用户表单,Userform1为Ok。 userform2具有Combobox(Proyect Code)和我想要过滤的ListBox。 userform3还没有准备好,因为我需要100%的Userform2来做出决定。 希望能帮助到你。 此致
答案 0 :(得分:1)
我已经遇到了类似的情况,但是我需要根据其他ListBox的选择和选项的选择来过滤ListBox,而不是ComboBox。我发现满足我需要的方法是在隐藏的工作表中使用数据透视表。它对我来说很好,有点不是所有的数据都可以在数据透视表中重新排列,所以我会理解我的建议是否适用于你。
=OFFSET('Certificates Pivot'!$A$5;0;0;COUNTA('Certificates Pivot'!$A$5:$A$50);2)
UserForm的代码将是这样的:
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "CustomerID"
ComboBox2.RowSource = "SalesOrg"
With ListBox1
.RowSource = "Consult_List"
.ColumnCount = 2
.ColumnWidths = "60;90"
End With
End Sub
Private Sub ComboBox1_Change()
Dim SelectedCID As String
Dim SelectedSO As String
SelectedCID = ComboBox1.Text
SelectedSO = ComboBox2.Text
With Sheets("Certificates Pivot").PivotTables("Certificates_PivotTable")
.ClearAllFilters
If Not SelectedCID = "" Then .PivotFields("Customer ID").CurrentPage = SelectedCID
If Not SelectedSO = "" Then .PivotFields("Sales Org.").CurrentPage = SelectedSO
End With
ListBox1.RowSource = "Consult_List"
End Sub
Private Sub ComboBox2_Change()
Call ComboBox1_Change
End Sub
您可以隐藏数据透视表所在的工作表,因此当您通过UserForm过滤它时,它将在后台更新。您还应该设置数据透视表以更新其缓存以捕获数据源中的新输入。
我希望它适合你!让我知道结果是什么。