Страницы: 1 2 След.
RSS
Выпадающий список с учетом отфильтрованного диапазона
 
Доброго времени суток. Вопрос к спецам по VBA. Имеется два выпадающих списка, одни в ячейке, созданный с помощью "Проверка данных" другой элемент ActiveX поле со списком. Оба используют один и тот же диапазон. Но так как список разросся до неимоверных размеров, выбирать в нем стало не совсем удобно, точнее совсем неудобно. Есть ли возможность не отображать в выпадающем списке скрытые строки диапазона? Т.е. чтобы в комбобокс попадали только те данные из диапазона, которые в данный момент не скрыты. Или как эту задачу можно решить по-другому?
Изменено: antal10 - 25.02.2015 00:51:14
 
Перебирать диапазон циклом: если строка не скрыта - в КомбоБокс её.
 
Не совсем понял, что вы имеете ввиду Юрий М
 
А то и имею)) Вы лучше уточните - ЧТО непонятно? )
 
Я просто далекий от VBA поэтому и непонятно. Выпадающий список делал на основе "Приемов", а про комбобокс тоже на форуме вычитал и себе сделал, там хоть список подлиннее. Но что-то глобальное, тем более связанное с VBA у меня мозгов не хватает. Вот и обратился к гуру.
 
См. вариант. КомбоБокс на втором листе.
 
Что-то я не совсем понял. Как оно работает. КомбоБокс пустой. А должен показывать те строки которые не скрыты. Или может я не разобрался.
 
КомбоБокс будет заполнен при активации второго листа. Отметьте в фильтре нужные строки и переключитесь на второй лист.
 
Так и сделал Юрий М. Комбобокс все равно пустой. Макросы включены.
 
Открыл свой файл прямо с сайта - КомбоБокс заполнен.
 
У меня тоже не работает, в модуле второго листа макросы не запускаются (2010)
Изменено: Alexander88 - 24.02.2015 14:45:54
 
У меня всё работает. У Вас события не отключены, случайно? ))
 
Добавил комбобокс на третий лист - работает
При удалении комбобокса со второго листа эксель вылетает
Файл похоже бракованный :)
 
А не связано ли это с проблемой, когда ActiveX после обновления перестали работать? И у меня ведь всё нормально...
 
Да действительно на третьем листе заработало, но сразу выскочил debug и подсветил строку
Код
With Sheets("Лист1").AutoFilter.Range
Потом вроде бы пошло нормально с третьим листом, но при удалении второго листа эксель вылетел.
Изменено: antal10 - 24.02.2015 00:42:42
 
antal10, причина мне неизвестна. Но ведь код у Вас есть, КомбоБокс нарисовать сможете - создайте всё в новом файле - в чём проблема? )
 
Спасибо Юрий М так и сделаю. Я просто не знал, что проблема в файле.
 
Да я сам удивлён - ещё никто на мои файлы не жаловался - макросы все работали...
 
Добрый день профессионалы и любители Excel. Никак не удается победить. У меня никак не получается прикрутить макрос, который любезно предоставил Юрий М к своему файлу. Он не хочет никак работать и к тому же выдает ошибку. Что не так? Может я конечно не так все объяснил чего бы мне хотелось. Попробую еще раз.
Есть таблица клиентов, они фильтруются по районам срезами. И мне бы хотелось, чтобы в комбобоксе отображались только те клиенты, которые отфильтрованы срезами согласно району. Файл для наглядности прилагаю.
 
Цитата
antal10 написал: Файл для наглядности прилагаю.
Увы. Ваш файл работает только в 2013.... у меня счас 2010.
 
Миш, а мой файл не проверял?
 
На первый взгляд у меня работает. Глубоко не лез. (...меняешь фильтр, меняется комбобокс)
 
А глубоко и не нужно)) Спасибо! А то я уже испугался)
 
Да, но у меня "свежеустановленная" система (ну и офис, само-собой). Возможно "обновления" еще не дошли :)
 
К сожалению пересоздать файл в 2010 не получается. Так как срезы не создаются. А суть заключалась в том что если профильтровать срезом, то макрос выдает ошибку
Run-time error "91":
Object variable or With block variable not set
и подсвечивает строку
Код
With Sheets("Лист1").AutoFilter.Range
 
Тогда попробуйте искать последнюю строку другим способом.
 
antal10, проверьте такой вариант.
 
Юрий М
у меня тоже макрос не отработал. Процедура на активацию листа почему то не срабатывает.
antal10 такая запись избавит от данной ошибки
Код
Sheets("Клиенты").ListObjects("Таблица1").AutoFilter.Range
 
antal10, Попробуйте так:
Код
Private Sub Worksheet_Activate()
Dim LastRow As Long, i As Long
    With Sheets("Клиенты").Range("Таблица1")
        Me.ComboBox5.Clear
        For i = 1 To .Rows.Count
            If .Rows(i).Hidden = False Then Me.ComboBox5.AddItem .Cells(i, 1)
        Next
    End With
    Me.ComboBox5.DropDown
End Sub

И уберите в ComboBox5 свойство ListFillRange
 
Извиняюсь, что так долго отписывался. Все варианты теперь работают со срезами. А то из большого списка клиентов, в комбобоксе было неудобно искать.
Такую фичу можно и в Приемы с выпадающими списками. Очень удобно. Спасибо Юрий М, V, Михаил С.
Еще один вопрос по теме. Возможно ли посадить макрос на какое-нибудь другое событие не на активацию листа. Так как удобнее если срез находится на листе с комбобоксом. В моем случае срез скопирован на страницу с комбобоксом. И при выборе в нем, все равно приходится переключится на другой лист, а потом обратно чтоб сработал макрос. Это не совсем удобно. На какое событие можно повесить макрос, чтобы он срабатывал без переключения листов. Заранее благодарен.
Страницы: 1 2 След.
Наверх