【问题标题】:VBA is it possible to pass a Dictionary/Collection to an autofilter?VBA 是否可以将字典/集合传递给自动过滤器?
【发布时间】:2014-06-20 14:40:13
【问题描述】:

这个想法是创建一个变量来保存之前使用宏对其所做的更改。我有一个用户窗体,它从一个范围中提取值并在列表框中填充唯一值。然后我希望能够将选定的值添加到我的字典/集合中并保存更改。完成所有必要的更改后,宏应使用字典变量作为自动过滤器的标准。

我的问题有两个,我应该使用什么类来完成这个?如何使用此变量自动过滤我的工作表?用户表单代码如下:

第一段代码用于“添加”命令按钮。它应该在列表框中获取选定的值并将它们添加到标题为“市场”的字典中。之后的代码从最近打开的 Excel 工作簿中提取值,并在列表框中显示唯一值。 Listbox2 包含过去使用宏的所有先前值。我想在用户窗体中添加一个“删除”按钮,以便在必要时整理列表。下面的两个公共变量实际上位于主宏模块上,这将允许我在用户窗体停止运行后将值存储在字典中。

Private Sub CommandButton1_Click()
Dim i As Long

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        Market.Add ListBox1.List(i)
        Set Market = New Collection
    End If
Next


End Sub

Private Sub UserForm_Initialize()

Dim myList As Collection
 Dim myRange As Range
 Dim ws As Worksheet
 Dim myVal As Variant
 Dim Col As Integer

 Set ws = ActiveWorkbook.Sheets("Daily Unconfirmed")
 Col = WorksheetFunction.Match("Marketer", ws.Range("3:3"), 0)
 Set myRange = ws.Range(Cells(4, Col), Cells(4, Col).End(xlDown))
 Set myList = New Collection
 On Error Resume Next

 For Each mycell In myRange.Cells
     myList.Add mycell.Value, CStr(mycell.Value)
 Next mycell
 On Error GoTo 0

 For Each myVal In myList
     Me.ListBox1.AddItem myVal
 Next myVal

作为变体的公共项目 公开市场作为收藏

Market.Add "Al D"
Market.Add "B Collins"
Market.Add "B G"
Market.Add "C Huter"

For Each item In Market
    Me.ListBox2.AddItem item
Next item

End Sub

【问题讨论】:

  • 您可以传递字典的.Keys().Values(),也可以传递向量数组,但我认为您不能直接将集合传递给.List 属性,您有进行For Each 迭代。

标签: excel vba dictionary collections autofilter


【解决方案1】:

由于 AutoFilter 数组运行, 我将动态构建数组并在过滤子中使用它:

Dim ary()

Sub MAIN()
    Call BuildDynamicArray
    Call FilterMyData
End Sub

Sub BuildDynamicArray()
    Dim inString As String
    i = 1
    While 1 = 1
        x = Application.InputBox(Prompt:="Enter a value", Type:=2)
        If x = False Then GoTo out
        ReDim Preserve ary(1 To i)
        ary(i) = x
        i = i + 1
    Wend
out:
End Sub

Sub FilterMyData()
    ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
End Sub

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多