Идея заключалась в том, чтобы создать переменную, которая сохраняла бы изменения, внесенные в нее после предыдущего использования макроса. У меня есть пользовательская форма, которая извлекает значения из диапазона и заполняет уникальные значения в списке. Затем я хочу иметь возможность добавлять выбранные значения в свой словарь/коллекцию и сохранять изменения. После внесения всех необходимых изменений макрос должен использовать переменную словаря в качестве критерия автофильтра.
Мой вопрос в два раза, какой класс я должен использовать для этого? Как использовать эту переменную для автоматической фильтрации моего листа? Код пользовательской формы ниже:
Первый бит кода предназначен для командной кнопки «Добавить». Предполагается, что выбранные значения будут взяты из списка и добавлены в словарь под названием «Рынок». Код после этого извлекает значения из недавно открытой книги 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
. - person David Zemens   schedule 20.06.2014