Как сохранить значения списка (множественный выбор) при закрытии формы? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть форма со списком (MultiSelect).ListBox действует как автофильтр на листе «Фильтр».Как сохранить значения ListBox при закрытии формы?Как сделать так, чтобы при открытии формы все значения ListBox выбирались по умолчанию?А как сделать так, чтобы диапазон автофильтра определялся сам собой?Теперь диапазон устанавливается вручную:

With Sheets("Filter").Range("$A$2:$A$2355").

Чтобы определить диапазон, я попытался применить следующий код:

Sheets("Filter").Range("a3:a" & Sheets("Filter").Range("a" & Sheets("Filter").Rows.Count).End(xlUp).Row).Value

... но произошла ошибка.

Private Sub UserForm_Initialize()
  With ListBox1
       .AddItem "One"
       .AddItem "Two"
       .AddItem "Three"
       .AddItem "Four"
       .AddItem "Five"
       .AddItem "Six"
       .AddItem "Seven"
  End With
End Sub

Private Sub ListBox1_Change()
Application.ScreenUpdating = False
Dim Arr()
Dim Str$, i%, u%
u = 0
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        ReDim Preserve Arr(u)
        Arr(u) = ListBox1.List(i, 0)
        u = u + 1
    End If
Next i
With Sheets("Filter").Range("$A$2:$A$2355")
    If u = 0 Then .AutoFilter Field:=1: Exit Sub
    .AutoFilter Field:=1, Criteria1:=Array(Arr), Operator:=xlFilterValues
End With
Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 24 мая 2019

Мне пришлось сделать именно это, и решение похоже на Skin - просто сохраните значения в вашей форме на отдельном (вероятно, скрытом) листе после того, как люди обновят форму

 Sheets("Selection").Range("f3") = UserFormData.Divisioncbo.Value 

, а затем, когдаони снова открывают форму, чтобы обновить ее, основываясь на этих значениях

 UserFormData.Divisioncbo.Value = Sheets("Selection").Range("f3")

Что касается диапазона для вашего фильтра, я думаю, что у вас, по сути, та же проблема, что и у меня - попытка определить диапазон неизвестной длины изатем использовать его как список, из которого пользователи могут выбирать?Я добавил список в диспетчер имен с именем PeopListname =OFFSET(Lists!$M$3,0,0,COUNTA(Lists!$M:$M)-1,1), а затем сделал его источником строки в пользовательской форме VBA = PeopListname

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...