Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 VBA是否可以将字典/集合传递给自动筛选?_Excel_Vba_Dictionary_Collections_Autofilter - Fatal编程技术网

Excel VBA是否可以将字典/集合传递给自动筛选?

Excel VBA是否可以将字典/集合传递给自动筛选?,excel,vba,dictionary,collections,autofilter,Excel,Vba,Dictionary,Collections,Autofilter,其想法是创建一个变量,保存以前使用宏时对其所做的更改。我有一个userform,它从一个范围中提取值,并在列表框中填充唯一的值。然后,我希望能够将选定的值添加到我的字典/集合中并保存更改。完成所有必要的更改后,宏应使用dictionary变量作为自动筛选的条件 我的问题有两个,我应该用什么课程来完成这个任务?如何使用此变量自动筛选我的工作表?用户表单代码如下: 第一位代码用于“添加命令”按钮。它应该获取列表框中的选定值,并将它们添加到名为Market的字典中。之后的代码从最近打开的excel工作

其想法是创建一个变量,保存以前使用宏时对其所做的更改。我有一个userform,它从一个范围中提取值,并在列表框中填充唯一的值。然后,我希望能够将选定的值添加到我的字典/集合中并保存更改。完成所有必要的更改后,宏应使用dictionary变量作为自动筛选的条件

我的问题有两个,我应该用什么课程来完成这个任务?如何使用此变量自动筛选我的工作表?用户表单代码如下:

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

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
由于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
您可以传递字典的.Keys或.value,也可以传递向量数组,但我认为您不能直接将集合传递给.List属性,您必须为每次迭代执行以下操作。