Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

собственный фильтр

Автор leech, 25.03.2011, 09:58

« назад - далее »

leech

Доброго времени суток!

Делаю свой фильтр.
Исходные данные: на форме Form1 присутствуют ComboBox2 - условие фильтра (поле), ListBox1 заполнен возможными вариантами значений (multiselect)

Так вот собственно задача отфильтровать по выбранным значениям ListBox1

Автозапись макроса выдает следующее (для выбора значений >2):

   Selection.AutoFilter
   ActiveSheet.Range("$A$5:$AF$77").AutoFilter Field:=2, Criteria1:=Array( _
       "Запись 1", "Запись 13", "Запись 3", "Запись 6")
, Operator:= _
       xlFilterValues

Я попытался переделать это под себя. Сделал массив нужных значений ListBox'а. Но как этот массив подложить _автофильтр_у никак не пойму. Пытался уже из этих значений сделать строку вида
   "Запись 1", "Запись 5"
и ее уже подсунуть в скобки Array, но тоже ошибка.

Помогите пожалуйста!

p.s. Office 2007. Вроде говорят что в 2003 такое вобще не работает. Может быть тогда есть обходной вариант?

ExcelFin

ну как-то так в 2007-2010:

Public Sub ListBoxAsFilter(oRange As Excel.Range, nField As Long, oList As MSForms.ListBox)
    Dim sResult As String
    Dim nIdx As Long
       
    sResult = ""
    For nIdx = 0 To oList.ListCount - 1
        If oList.Selected(nIdx) Then
            sResult = sResult & CStr(oList.List(nIdx)) & ";"
        End If
    Next
   
    If sResult <> "" Then
        sResult = Left(sResult, Len(sResult) - 1)
        oRange.AutoFilter Field:=nField, Criteria1:=Split(sResult, ";"), Operator:=xlFilterValues
       
    Else
        oRange.AutoFilter Field:=nField
    End If
End Sub

В ранних версиях используйте Range.AdvancedFilter.
http://www.excelfin.ru - для тех, кто не пользуется калькулятором