Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Извлечение значений из фильтра / 25 сообщений из 27, страница 1 из 2
07.02.2008, 14:21
    #35117012
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемые знатоки,
Есть афтофильтр, нужно извлечь из него в массив все значения. Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Dim arrFilter()
    Dim f%
    Dim intFilter As Integer
    intFilter =  1 
    ReDim arrFilter(intFilter)
    For f =  1  To ActiveSheet.Range("B1").AutoFilter.Filters.Count
        If intFilter =  1  Then
            arrFilter(intFilter -  1 ) = Range("B1").AutoFilter.Filters(f)
            Else
            intFilter = intFilter +  1 
            ReDim Preserve arrFilter(intFilter)
            arrFilter(intFilter -  1 ) = Range("B1").AutoFilter.Filers(f)
        End If
    Next
Ругается, говорит "Object required".
Что делаю не так?
...
Рейтинг: 0 / 0
07.02.2008, 14:37
    #35117085
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
> Уважаемые знатоки,
> Есть афтофильтр, нужно извлечь из него в массив все значения.
> Пробовал:

> Ругается, говорит "Object required".
> Что делаю не так?
Справку не читаеш это первое и второе не понятно, ты список условий хочеш
получить или результат действия автофильтра, т.е. отфильтрованные данные

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2008, 14:39
    #35117093
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Игорь Горбонос
Справку не читаеш это первое и второе не понятно, ты список условий хочеш
получить или результат действия автофильтра, т.е. отфильтрованные данные

Posted via ActualForum NNTP Server 1.4

Справку читал, но может что и просмотрел.
Хочу получить список условий.
...
Рейтинг: 0 / 0
07.02.2008, 14:47
    #35117130
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
> Автор: dd44
> Игорь Горбонос
>
> Справку не читаеш это первое и второе не понятно, ты список
> условий хочеш
> получить или результат действия автофильтра, т.е.
> отфильтрованные данные
>
>
> Справку читал, но может что и просмотрел.
> Хочу получить список условий.
Каких условий? фильтра?
вот из справки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub ChangeFilters()

Set w = Worksheets("Crew")
With w.AutoFilter
    currentFiltRange = .Range.Address
    With .Filters
        ReDim filterArray( 1  To .Count,  1  To  3 )
        For f =  1  To .Count
            With .Item(f)
                If .On Then
                    filterArray(f,  1 ) = .Criteria1
                    If .Operator Then
                        filterArray(f,  2 ) = .Operator
                        filterArray(f,  3 ) = .Criteria2
                    End If
                End If
            End With
        Next
    End With
End With

w.AutoFilterMode = False
w.Range("A1").AutoFilter field:= 1 , Criteria1:="S"

End Sub
найти: ставиш курсор на AutoFilter и F1

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2008, 15:17
    #35117239
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемый Игорь,
Данный код собирает значения включеных фильтров, мне нужно собрать все значения фильтра столбца В в массив, при выключенном фильтре.
...
Рейтинг: 0 / 0
07.02.2008, 15:34
    #35117282
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Да,
Написание кода If Not .On Then ...
было бы выходом, но, как передать значение критериев? Croteria1, 2 и т.д. не устроит, так как количество будет постоянно меняться, а Criteria & f не работает.
...
Рейтинг: 0 / 0
07.02.2008, 15:34
    #35117283
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
> Автор: dd44
> Уважаемый Игорь,
> Данный код собирает значения включеных фильтров, мне нужно собрать
> все значения фильтра столбца В в массив, при выключенном фильтре.
во мудрено то как :-) я правильно понял что нужен список того что появляется
при нажатии на кнопку автофильтра???
если да то на bbs.vbstreets.ru кто-то это делал, поищи там

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2008, 15:47
    #35117347
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемый Игорь,
Ничего там не нашел (((
...
Рейтинг: 0 / 0
07.02.2008, 15:53
    #35117368
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Мне кажется, что эта строка имеет проблему:

arrFilter(intFilter - 1) = Range("B1").AutoFilter.Filters(f)

Вы пытаетесь в массив Variant (кстати, не Object) внести фильтр (object) с индексом f, но вы этот объект не создаете (не вижу Set). Вот object и требуется. Но почему тогда вы object (недосетенный) засовываете в variant?
...
Рейтинг: 0 / 0
07.02.2008, 15:59
    #35117388
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемый VladConn,
То что Вы написали мне не совсем понятно. У меня есть массив, куда я пытаюсь засунуть возможые значения фильтра, зачем тут что-то вводить, хотя возможо Вы правы.
Не подскажите мне тогда как это надо написать?
...
Рейтинг: 0 / 0
07.02.2008, 16:23
    #35117475
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Так тип массива не совпадает с типом того, что вы хотите в него вносить, а то, что вы хотите вносить (а именно фильтр), еще и не фильтр даже. Там нет Set и/или нет декларации As Filter.
...
Рейтинг: 0 / 0
07.02.2008, 16:30
    #35117506
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Код: plaintext
1.
2.
3.
Dim arrFilter() as Object
...
SET arrFilter(intFilter -  1 ) = Range("B1").AutoFilter.Filers(f)
...
...
Рейтинг: 0 / 0
07.02.2008, 16:39
    #35117558
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Или вы не хотите вносить фильтр, а хотите вносить его какие-то атрибуты? Тогда ваш код не отражает ваших намерений. Вот это вот:

Range("B1").AutoFilter.Filters(f)

есть ссылка на определение фильтра. Но так ее не используют. Надо бы Dim objF as Filter, Set objF = Range("B1").AutoFilter.Filters(f). Ну и так далее, если вы конечно хотите вносить фильтр, а не его свойства. Я не знаю, что вы хотите, т.к. ваш код противоречит вашему вопросу. Я не знаю, что вы имеете ввиду.

Вот посмотрите, Игорь Горбонос в сущности спрашивает вас о том же самом. Вот как он не видит, где нужно ставить мягкие знаки после шипящих (3й класс начальной школы), так вы не видите, где нужно вводить объекты в явном виде (если это требуется, конечно, что в вашем случае еще не факт).

Если у меня будет время, я попробую написать для вас работающий код.

Успехов

vladconn
...
Рейтинг: 0 / 0
07.02.2008, 16:40
    #35117559
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Спасибо, попробую
...
Рейтинг: 0 / 0
07.02.2008, 17:11
    #35117680
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Вот сделал пример, который собирает в массив свойство Criteria1 всех задействованных фильтров. Обратите внимание: поскольку свойство Criteria1 имеет тип Variant, то и массив их значений тоже Variant, и только лишь поэтому.

Обратите также внимание на If Not objWsht.AutoFilter Is Nothing Then. Это на случай, если на листе нет вообще AutoFilter, не установлен. Попробуйте убрать эту строку и прогнать код без всякого AutoFilter на листе. Посмотрите на сгенерированную ошибку, что она вам скажет.

Успехов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Private Sub CommandButton1_Click()
    Dim objF As Filter
    Dim objWsht As Worksheet
    Dim varCriteria1() As Variant
    Dim intUBound As Integer
    
    Set objWsht = ThisWorkbook.Worksheets( 1 )
    
    If Not objWsht.AutoFilter Is Nothing Then
        
        For Each objF In objWsht.AutoFilter.Filters
            If objF.On Then
                intUBound = intUBound +  1 
            End If
        Next objF
    
        ReDim Preserve varCriteria1(intUBound)
        
        intUBound =  0 
        For Each objF In objWsht.AutoFilter.Filters
            If objF.On Then
                intUBound = intUBound +  1 
                varCriteria1(intUBound) = objF.Criteria1
            End If
        Next objF
    
    Else
        MsgBox "There is no Auto Filter at the sheet"
    End If
    
End Sub
...
Рейтинг: 0 / 0
07.02.2008, 17:17
    #35117698
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемый VladConn,
Вы меня не поняли. Мне нужно собрать все возможные варианты выключенного фильтра.
...
Рейтинг: 0 / 0
07.02.2008, 17:23
    #35117713
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
ну так поставаьте так:

Код: plaintext
If NOT objF.On Then
...
Рейтинг: 0 / 0
07.02.2008, 17:24
    #35117727
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Тогда вам вообще он не нужен. Соединитесь с ADO, напишите SELECT DISTINCT, и вперед.
...
Рейтинг: 0 / 0
07.02.2008, 17:30
    #35117749
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Konst_Oneну так поставаьте так:

Код: plaintext
If NOT objF.On Then


И дальше что? Кто будет править датским королевством? Кто скажет вам, каков у вас приход? И сколько всадников не спит у вас в дозоре? Кто перепись ведет? Кто скажет, сколько новых душ должно родиться, а сколько отлететь? А королевство датское - от моря и до моря.
...
Рейтинг: 0 / 0
07.02.2008, 17:43
    #35117803
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Уважаемый VladConn,
а можно ли через оператор Count получить количество вариантов в каждом фильтре, например Filters.Count, или то выдаст только количество столбцов в которых есть фильтр?
...
Рейтинг: 0 / 0
07.02.2008, 17:45
    #35117812
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Или например FilterIndex.Count?
...
Рейтинг: 0 / 0
07.02.2008, 18:00
    #35117876
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
> Автор: dd44
> Или например FilterIndex.Count?
Нет. Это все свойства самих фильтров, примененных.
чем не решение, для тебя вполне нормальное:
Автор: VladConn
Тогда вам вообще он не нужен. Соединитесь с ADO, напишите SELECT
DISTINCT, и вперед.
запиши макрос получения данных и будет щастье :))

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2008, 18:07
    #35117898
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
Игорь Горбонос
Тогда вам вообще он не нужен. Соединитесь с ADO, напишите SELECT
DISTINCT, и вперед.
запиши макрос получения данных и будет щастье :))

Posted via ActualForum NNTP Server 1.4

Уважаемый Игорь,
Наверное было бы счасте, но я с этим не знаком ((
...
Рейтинг: 0 / 0
07.02.2008, 18:19
    #35117929
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
dd44Уважаемый VladConn,
а можно ли через оператор Count получить количество вариантов в каждом фильтре, например Filters.Count, или то выдаст только количество столбцов в которых есть фильтр?

Не думаю. Там кол-во столбцов. И Count - не оператор, а свойство. Вам, в сущности, надо знать, сколько уникальных значений содержится в каждом столбце. Ведь так? Ну так это SELECT DISTINCT.

Но я посмотрю, можно ли удобно обойтись без SELECT DISTINCT исключительно фильтром.

vladconn
...
Рейтинг: 0 / 0
07.02.2008, 18:37
    #35117977
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение значений из фильтра
В файле пример получения уникального списка из столбца. положить на диск с и не отключать макросы :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Извлечение значений из фильтра / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]