在 VBA 上用组合框过滤列表框
filter a ListBox with a Combobox on VBA
我正在开发用户窗体,我花了数周时间尝试开发代码以根据组合框的值过滤列表框。
我所做的最接近的事情是制作一个命令按钮来过滤列表框提供的 table 但它不会刷新列表框。
我在论坛上看到有人做我想做的事情,但我已经尝试了所有这些都没有结果。
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 日
工作簿Link
https://drive.google.com/open?id=0B4B7v0UZxizCYnY2bVNTNURyLVU
在 WorkBook 中您将看到 3 个用户窗体,Userform1 可以。
userform2 有组合框(Proyect 代码)和我要过滤的列表框。
userform3 还没有准备好,因为我需要 100% 的 Userform2 来做出决定。
希望能帮助到你。
此致
我已经遇到过类似的情况,但我需要根据其他 ListBox 的选择和 Option 的选择来过滤 ListBox,而不是 ComboBox。我发现满足我需要的方法是在隐藏 sheet 中使用 Pivot Table。它对我来说效果很好,但并不是所有数据都可以在 Pivot 中重新排列 Table,所以如果我的建议对您不起作用,我会理解。
- 第一步: 设置一个 Pivot Table 以及您要在 ListBox 中使用的数据源。在“过滤器”区域中拉出要过滤的字段。使用您的数据创建动态命名范围,如图所示:
=OFFSET('Certificates Pivot'!$A;0;0;COUNTA('Certificates Pivot'!$A:$A);2)
- 第二步: 创建用户窗体。我设置了 2 个 ComboBoxes 作为 ListBox 的过滤器,但是你可以删除或添加尽可能多的,你只需要调整你的代码。我还命名了组合框列表选项中可用的范围。所以我们将有:
用户窗体的代码将是这样的:
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
您可以隐藏枢轴 Table 所在的 sheet,这样当您通过用户窗体过滤它时,它会在后台更新。您还应该设置 Pivot Table 以更新其缓存以捕获数据源中的新输入。
希望对你有用!让我知道结果如何。
我正在开发用户窗体,我花了数周时间尝试开发代码以根据组合框的值过滤列表框。
我所做的最接近的事情是制作一个命令按钮来过滤列表框提供的 table 但它不会刷新列表框。
我在论坛上看到有人做我想做的事情,但我已经尝试了所有这些都没有结果。
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 日 工作簿Link https://drive.google.com/open?id=0B4B7v0UZxizCYnY2bVNTNURyLVU
在 WorkBook 中您将看到 3 个用户窗体,Userform1 可以。 userform2 有组合框(Proyect 代码)和我要过滤的列表框。 userform3 还没有准备好,因为我需要 100% 的 Userform2 来做出决定。 希望能帮助到你。 此致
我已经遇到过类似的情况,但我需要根据其他 ListBox 的选择和 Option 的选择来过滤 ListBox,而不是 ComboBox。我发现满足我需要的方法是在隐藏 sheet 中使用 Pivot Table。它对我来说效果很好,但并不是所有数据都可以在 Pivot 中重新排列 Table,所以如果我的建议对您不起作用,我会理解。
- 第一步: 设置一个 Pivot Table 以及您要在 ListBox 中使用的数据源。在“过滤器”区域中拉出要过滤的字段。使用您的数据创建动态命名范围,如图所示:
=OFFSET('Certificates Pivot'!$A;0;0;COUNTA('Certificates Pivot'!$A:$A);2)
- 第二步: 创建用户窗体。我设置了 2 个 ComboBoxes 作为 ListBox 的过滤器,但是你可以删除或添加尽可能多的,你只需要调整你的代码。我还命名了组合框列表选项中可用的范围。所以我们将有:
用户窗体的代码将是这样的:
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
您可以隐藏枢轴 Table 所在的 sheet,这样当您通过用户窗体过滤它时,它会在后台更新。您还应该设置 Pivot Table 以更新其缓存以捕获数据源中的新输入。
希望对你有用!让我知道结果如何。