Страницы: 1 2 3 4 5 6 7 8 9 След.
RSS
Альтернатива выпадающему списку (форма с поиском)
 
Добрый день Планетяне.  
По роду своей работы мне довольно часто приходится заполнять таблицы, выбирая данные из различных списков (клиенты, товары и т. д.). Если список небольшой использую стандартный екселевский выбор из списка через проверку данных. Но при большом размере исходного списка данный вариант очень неудобен так как пролистывать выпадающий список до нужного значения долго и муторно.    
Поэтому решил сделать форму для поиска и вставки значения в ячейку.  
Во вложении мое видение решения данного вопроса.  
Принимаю все предложения и замечания по доработке данной формы.
Редко но метко ...
 
GIG_ant, были же темы по поиску значения по первым буквам. Там может быть чего-нибудь.  
Если уже смотрел и нужны советы по данному решению - что ж, я промазал :)
 
Недавно обсуждался вопрос по усовершенствованию выпадающего списка (тема: Интересные вопросы по VBA), а я со своей стороны решил предложить другой вариант. Для удобства. Авось кому то понадобится.
Редко но метко ...
 
1. Вызов по двойному клику (лично для меня) крайне не удобен. Я вообще стараюсь не использовать мышь в Excel по мере возможностей.  
2. "Вставить" по Enter эт хорошо. А форму потом закрывать опять пользователю?)  
3. См. скрин  
 
Что понравилось:  
1. То, что появляется рядом с курсором. Нет надобности глазами бегать туда-сюда  
2. Закрывается по "Esc"  
3. С формой удобно (лично мне) работать с клавиатуры
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Еще одно замечание: не удобно будет работать с формой при так сказать "длинных записях". Они просто в листбоксе не поместятся : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Насчет последнего: я бы все-таки загружал в форму из отсортированного массива. Т.о. можно определить самую длинную запись или среднюю длину записи и исходя из этого выставить ширину формы.  
 
Да и еще, у Вас предварительный список отсортированный. Эт, конечно, хорошо, но на практике, вряд ли такое будет : )  
 
В идеале (я считаю), в форму должны подставляться данные "на лету" c того же столбца, например, где работает сам пользователь. Т.о. у него есть возможность сформировать свой список, а не работать по раннее созданному. Но эт как +/-
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=21.10.2011 09:52}{thema=}{post}{/post}{/quote}  
1. Если двойной клик не удобен можно назначить сочетание клавиш.  
2. Форма закрывается при изменении выделения на листе если выделенная ячейка не относится к первому столбцу, или клавиша ESC.  
3. Что бы форма не вылазила за края экрана можно наворотить код с использованием дополнительных функций (ZVI приводил пример с календарем.), но я решил не загромождать код.
Редко но метко ...
 
>>3. Что бы форма не вылазила за края экрана можно наворотить код с использованием дополнительных функций (ZVI приводил пример с календарем.), но я решил не загромождать код.  
 
На счет этого согласен. Пусть будет так, как есть. Но тем не менее, согласитесь, не очень удобно) Я бы и сам, если взялся за подобный "проект" не стал воротить с API. С другой стороны, не уверен, но может быть можно как-то стандартными способами отследить "Видимую область экрана"? Эт в качестве информации к размышлению : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=21.10.2011 10:03}{thema=}{post}Насчет последнего: я бы все-таки загружал в форму из отсортированного массива.{/post}{/quote}  
 
По поводу сортировки я думал, можно перед заполнением формы сортировать список.  Но исходя из опыта работы со списками/справочниками, хочу сказать что в большинстве своем они являются статическими, то есть изначально заполняются и относительно редко дополняются новыми элементами. При добавлении ничего не стоит и сортирнуть.  
Хотя для удобства наверно следует добавить код сортировки.
Редко но метко ...
 
>>Но исходя из опыта работы со списками/справочниками, хочу сказать что в большинстве своем они являются статическими  
 
Мой подсказывает обратное : ) Еще один плюс загрузки из массива - нет необходимости хранить данные на листе, что в свою очередь сокращает объем файла. Представьте список в 2000-3000 тыс., состоящий из словосочетаний. И базу приблизительно такого же объема. В итоге мы имеем размер файла = список * 2. Так вот 2000-3000 тыс. в одном столбце, еще столько же в другом и тру-ля-ля))))
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
добавил:  
- Быстрый вызов формы поиска (сочетание CTRL+SHIFT+R)  
- Автосортировку исходного массива
Редко но метко ...
 
>>Быстрый вызов формы поиска (сочетание CTRL+SHIFT+R)  
Ну эт надо еще умудрится так пальцы раскорячить, если вызывать одной рукой)  
Мож что попроще? Ctrl+Enter, например?)))  
 
>>Автосортировку исходного массива  
Все замечательно) Но я КАТЕГОРИЧЕСКИ за то, чтобы списки (по возможности) держать на листе "Базы".  
 
Ну а в целом впечатление хорошее) Очень даже) Мож чуть позже выложу свое (извращенное) виденье проблемы ^_^
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=21.10.2011 01:57}{thema=}{post}>>Быстрый вызов формы поиска (сочетание CTRL+SHIFT+R)  
Ну эт надо еще умудрится так пальцы раскорячить, если вызывать одной рукой)  
Мож что попроще? Ctrl+Enter, например?))){/post}{/quote}  
 
Да просто у меня все ближайшие клавиши уже заняты под разные фишки)). Ну уж вставить другое сочетание клавиш я думаю не составит труда.  
 
Спасибо за отзыв, буду думать как еще наворотить и сделать поуниверсальней.
Редко но метко ...
 
Антон,  
1. я удалил бы  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   If Intersect([A:A], Target) Is Nothing Or Target.Count > 1 Then Unload MainForm
End Sub  
Есть кнопка Закрыть и Esc, зачем третий вариант ?  
Это лишнее событие не позволит, например, ничего скопипастить на листе.  
2. убрал бы звёздочку после Criteria1:="=  
Union([Mylist].Parent.[A1], [Mylist]).AutoFilter Field:=1, Criteria1:="=*" & tbIn.Text & "*"
Искать "Яблоки" на букву "л" ?
 
По первому пункту частично согласен, хотя тогда выбранное найденное значение можно будет вставить в любую ячейку на листе, а не только в первом столбце. Может так даже и лучше.  
 
По второму: Если убрать звездочку то искать будет с начала слова в справочние , что не всегда удобно. Например если есть куча ООО "...." то нужно будет набирать ООО " и наименование предприятия, а в моем случае можно набрать часть наименования и найти интересующий вариант.
Редко но метко ...
 
По п.2 :  
А если сделать поиск по первым буквам слов: пробел & шаблон ?  
(только тогда от автофильтра придётся отказаться).
 
Антон, предложил своим ребятам ваш варинт  post_270006.xls -балдеют от удовольствия.Спасибо!
 
Сижу леплю форму. Как показал эксперимент у меня (да и у Вас похоже тоже) беда с позиционированием при изменении масштаба : (
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Понравилась такая реализация поиска, попробовала прикрепить в своей базе, но при закреплении автофильтра в шапке страницы "Закрепить области" форма поиска  пропадает из виду, помогите плиз ... файл прилагаю.
 
На данный момент вот такая капуста:  
+ Формирует список из активного столбца, исключая шапку таблицы (последнее надо настраивать). По идее, список можно "брать" откуда угодно.  
+ Список сортированный. На больших объемах (2000-3000) не катит. Ждать придется долго (2-3) сек. По необходимости/за ненадобностью, сортировку можно отключить (пока не реализовал), что значительно скажется на производительности, в сторону ее увеличения.  
+ Список без "пустых" записей  
+ Список без дубликатов  
+ Вызывается Ctrl+Enter  
 
 
- С позиционированием беда. Если кто подскажет, буду благодарен : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Смысл в том, что пользователю достаточно ввести данные ПРАВИЛЬНО всего ОДИН раз и в последующем он уже может получить к ним доступ практически мгновенно : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Пока не забыл, опять же про позиционирование: если опустить на 1-ин и более экранов вниз, то форма уже не видна( Вообщем, надо думать, но эт уже не сегодня : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Супер!  
Пару вопросов для образовательных целей  
1. nerv, как в Вашем коде реализована сортировка?  
2. что нужно изменить в коде что-бы выполнялся не ввод значения в ячейку, а вызывалась другая процедура, т.е. по форме нашел значение из списка нажал Enter - результат - вызов процедуры.
 
Всем доброго времени суток!  
 
Вроде как более-менее слепил форму с выпадающим списоком  
+ Форма открывается рядом с текущей/активной ячейкой. Нет нужды бегать глазами  
+ Создается список из активного столбца. Можно настроить, чтобы создавался откуда угодно, в том числе с уже заготовленных "шаблонов"  
+ Список не содержит повторов (уникальный)  
+ Список отсортирован по возрастанию. Если данные на листе предварительно отсортированы, то список формируется почти моментально. Для сравнения в файле, во 2-м столбце 1864 записи, не более 1-ой сек. и мы имеем 1859 уникальных.  
+ Навигация привычными "стандартными" клавишами: Up, Down, Page Up, Page Down  
+ Информация о количестве элементов списка  
+ Быстрый вызов Ctrl+Enter  
+ Быстрое закрытие Esc  
+ Быстрый ввод Enter  
 
 
- Хромает позиционирование при масштабе отличном от 100%  
 
 
Жду Ваших замечаний и предложений по данному вопросу : )  
С уважением, nerv  
 
 
 
igorss,  
 
>>nerv, как в Вашем коде реализована сортировка?  
См модуль формы  
>> что нужно изменить в коде что-бы выполнялся не ввод значения в ячейку, а вызывалась другая процедура  
Редактируйте процедуру FAction
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
+ устранена ошибка при поиске в пустом столбце  
 
\Так же запихнул в архив демо-скриншот : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
nerv, очень удобная и полезная штука получилась.  
Насчёт Ctrl + Enter - хорошо придумано.  
И в интерфейсе ничего лишнего нет.  
 
Осталось запихнуть всё это в надстройку, и выложить у меня на сайте)  
 
Предварительно только убрать ошибку при попытке ввода значения в защищённую ячейку,  
и убрать из выпадающего списка ячейки с ошибками:  
http://ExcelVBA.ru/pictures/20111023-yv9-15kb.jpg
 
{quote}{login=EducatedFool}{date=23.10.2011 03:45}{thema=}{post}  
Насчёт Ctrl + Enter - хорошо придумано.  
{/post}{/quote}Ну, вам (макрописателям) может и хорошо, а вот формулистам не очень...  
Это сочетание клавиш предназначено для ввода массива (не формул массива!).
 
Уважаемый EducatedFool!  
Скажите, когда эту надстройку можно будет посмотреть у Вас на сайте?
 
{quote}{login=kroha}{date=23.10.2011 01:17}{thema=}{post}  
Скажите, когда эту надстройку можно будет посмотреть у Вас на сайте?{/post}{/quote}А что, отсюда она Вам не нравится?
 
Все же хотелось бы в виде надстройки!
Страницы: 1 2 3 4 5 6 7 8 9 След.
Читают тему
Наверх