关闭表单时如何保存列表框值(多选)?

时间:2019-05-23 22:44:07

标签: excel vba

我有一个带有列表框(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 :(得分:0)

我必须做到这一点,解决方案类似于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