【发布时间】: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