Страницы: Пред. 1 2 3 4 5 6 7 8 9 След.
RSS
Альтернатива выпадающему списку (форма с поиском)
 
{quote}{login=kroha}{date=23.10.2011 01:44}{thema=}{post}Все же хотелось бы в виде надстройки!{/post}{/quote}Сохранив файл в формате xla Вы получаете надстройку.
 
Итак, что мы имеем в это версии (в совокупности с предыдущими)  
+ Форма открывается рядом с текущей/активной ячейкой. Нет нужды бегать глазами  
+ Создается список из активного столбца (по умолчанию). Можно настроить, чтобы он создавался откуда угодно, в том числе с уже заготовленных "шаблонов". Настроить разные условия на разные книги, а также листы этих книг и т.п.  
+ Список не содержит повторов (уникальный)  
+ Список отсортирован по возрастанию, причем если данные на листе хотя бы частично упорядочены, то он формируется в разы быстрее, а в случае с полностью отсортированным - почти мгновенно. Для сравнения в файле, во 2-м столбце 1864 записи, не более 1-ой сек. и мы имеем 1859 уникальных  
+ Поиск стал еще быстрее и удобнее. При вызове списка из ячейки содержащей значение, оно автоматически используется в качестве шаблона и производится поиск  
+ Навигация привычными стандартными клавишами: Up, Down, Page Up, Page Down  
+ Корректная работа со всеми типами данных: строки, даты, числа  
+ Обработка ошибок формул листа (спасибо EducatedFool)  
+ Обработка защиты ячеек листа (спасибо EducatedFool)  
+ Информация о количестве элементов списка  
+ Быстрый вызов Ctrl+Enter  
+ Быстрое закрытие Esc  
+ Быстрый ввод Enter  
 
 
- Хромает позиционирование. В том числе при масштабе отличном от 100%. Может быть Мастер Йода (EducatedFool) поколдует или чего подскажет? : )  
 
 
Serge 007,  
>>Это сочетание клавиш предназначено для ввода массива (не формул массива!).  
Макрос не отменяет ввод массива)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
C позиционированием формы у меня тоже не очень...  
 
Учитывая рекомендации отсюда:  
http://forum.developing.ru/showthread.php/?p=20187&viewfull=1#post20187  
наваял вот что (тестировал в Excel 2003):  
 
 
   With Me  
       .Caption = "Всего уникальных записей: " & x.Count: .ComboBox1.List = Arr()  
       '        .Left = j.Left - ActiveWindow.VisibleRange.Left + j.Width + Len(j.Row) * 4 + 20  
       '        .Top = j.Top - ActiveWindow.VisibleRange.Top + j.Height + .Height + 28  
 
 
       Dim cb As CommandBar, collLeft As New Collection, collRight As New Collection  
       For Each cb In Application.CommandBars  
           If cb.Visible Then  
               Select Case cb.Position  
                   Case msoBarLeft: collLeft.Add cb.Width, CStr(cb.Left)  
                   Case msoBarMenuBar, msoBarTop: collRight.Add cb.Height, CStr(cb.Top)  
               End Select  
           End If  
       Next  
       If collLeft.Count Then dx = collLeft.Count * collLeft(1)  
       If collRight.Count Then dy = (collRight.Count + 0.8) * collRight(1)  
 
       .Left = (j.Next.Left - ActiveWindow.VisibleRange.Left + 30) * ActiveWindow.Zoom / 100 + Application.Left + dx  
       .Top = (j.Next.Top - ActiveWindow.VisibleRange.Top) * ActiveWindow.Zoom / 100 + Application.Top + dy  
 
       If x.Count Then .ComboBox1.DropDown  
   End With  
 
 
Понятно, что код хреновый, и на 90% состоит из т.н. "костылей", но... на большее без WinAPI идей не хватило...  
 
 
 
PS: Сейчас заглянет сюда ZVI, и предложит универсальное решение из 2 строк кода )
 
{quote}{login=nerv}{date=23.10.2011 02:46}{thema=Выпадющий список с поиском (комбо). Версия 1.3 (23.10.2011)}{post}  
Макрос не отменяет ввод массива){/post}{/quote}Это как это?  
Хоткеи вроде как не умеют мысли читать и выбирать одно из нескольких действий...
 
Можно настроить, чтобы он создавался откуда угодно, в том числе с уже заготовленных "шаблонов". Настроить разные условия на разные книги, а также листы этих книг и т.п.  
 
Подскажите, пожалуйста, что нужно поменять в макросе, чтобы список создавался из соседнего листа книги,например, из столбца A, а не из активного столбца?
 
Уф... Попытался включить мозг и вроде как наиграл одну координату : )  
 
.Left = ((j.Left - ActiveWindow.VisibleRange.Left) + (Application.Width - ActiveWindow.UsableWidth) - ActiveWindow.Left - Application.Left + j.Width) * ActiveWindow.Zoom / 100  
 
EducatedFool, спасибо, что остаетесь не безучастны к данной проблеме)  
>>Осталось запихнуть всё это в надстройку, и выложить у меня на сайте)  
Эт дело мы обсудим позже ; ) Сперва нужно довести до ума, а то смысл выкладывать?  
 
Serge 007, а ты проверь)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Саш, касательно координат курсора посмотри здесь:  
 
http://www.planetaexcel.ru/forum.php?thread_id=13256  
 
позицирование ячеек на экране здесь:  
 
http://www.planetaexcel.ru/forum.php?thread_id=29055
 
Сереж, все просто когда вы вводите массив сочетанием Ctrl+Enter включен режим редактирования формул, он не доступен макросам...
 
Вижу тема все таки насущная, раз есть заинтересованные.  
Смотрю nerv пошел немного другим путем, на а я по старинке, воспользовавшись пожеланиями nerv и С.М. доделал свой вариант вставки из списка. Теперь вставлять значение можно в любом месте книги, кроме листа "Список", а также форма поиска и вставки может висеть не закрываясь во время работы с файлом, и выполнять поиск и вставку по необходимости.
Редко но метко ...
 
Да, Антон тема интересная) Проверь на большом списке из моего файла (2-ой столбец), addItem да еще и по ячейкам листа - эт медленно. Процедуру AddListItem я бы записал примерно(!) так. А то получается что мой вариант даже быстрее обрабатывает) Да, и масштаб при > 100 обрабатывает не совсем точно. Собственно, я сейчас и бьюсь только над этим - ПОЗИЦИОНИРОВАНИЕ  
 
Private Sub AddListItem()  
   On Error Resume Next  
   lbIn.Clear  
   OKButton.Enabled = False  
   With [Mylist].SpecialCells(xlCellTypeVisible)
       lbIn.List = IIf(IsArray(.Value), .Value, Array(.Value))  
   End With  
   OKButton.Enabled = True  
End Sub  
 
 
Владимир, спасибо большое, интересно, но немного не то. Интересует позиционирование формы относительно активной ячейки  
 
Нашел ссылку на тему позиционирования, но там какой то велосипед http://www.cpearson.com/excel/formposition.htm  
 
Люди добрые, кто знает как РАЗМЕСТИТЬ ФОРМУ ОТНОСИТЕЛЬНО АКТИВНОЙ ЯЧЕЙКИ?)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=VovaK}{date=24.10.2011 06:34}{thema=}{post}Сереж, все просто когда вы вводите массив сочетанием Ctrl+Enter включен режим редактирования формул, он не доступен макросам...{/post}{/quote}Спасибо за пояснение
 
{quote}{login=nerv}{date=24.10.2011 10:34}{thema=}{post} Процедуру AddListItem я бы записал примерно(!) так.{/post}{/quote}  
 
Изменил продцедуру создания списка по вашему совету, действительно так лучше.  
Единственное оставил строку:  
If Err <> 0 Then Exit Sub дабы кнопка "вставить" не была активна при пустом листбоксе.
Редко но метко ...
 
Наверно, лучше примерно(!) так, а то получается массив два раза создается  
IIf(.Count = 2, Array(.Value), .Value)  
только не понял, почему 2, эт формулы смотреть нужно  
Установи масштаб 200, вызови форму, затем опять 100, опять вызови, закрепи области на листе и т.п.  
 
Собственно, на данный момент самый больной вопрос (моей формы) - позиционирование, одни косяки ^_^
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Уважаемый GIG_ant!  
Объясните,пожалуйста, как в Вашей программе сделать выбор не из первой колонки списка, а скажем из второй или третьей, короче из любой по желанию?
 
Дело в том что у меня нет второй колонки, а в вашем случае нужно конкретно смотреть по примеру.
Редко но метко ...
 
Уважаемый GIG_ant!  
В Вашей программе в листе "список" сделал два столбца. Как включить в выпадающий список только второй столбец или только первый (правда с первым столбцом проблем нет), а если будет еще третий и четвертый?
 
{quote}{login=nerv}{date=24.10.2011 10:34}{thema=}{post}Люди добрые, кто знает как РАЗМЕСТИТЬ ФОРМУ ОТНОСИТЕЛЬНО АКТИВНОЙ ЯЧЕЙКИ?){/post}{/quote}  
Если надёжно, то так:  
http://www.planetaexcel.ru/forum.php?thread_id=9786  
http://www.planetaexcel.ru/docs/forum_upload/post_61078.zip
 
Владимир, большое спасибо!) Посмотрел код, мама дорогая))) Неужели разработчики, не могли это предусмотреть!? (риторический) Посидел тут, поковырялся и вот к каким выводам пришел:  
 
 
with Application  
 
левый верхний угол = .Left + .ActiveWindow.Left  
вне зависимости от: свернуто\развернуто приложение; свернут\развернут лист, закрепления областей, масштабирования  
 
панели слева = Application.Width - Application.UsableWidth  
вне зависимости от: свернуто\развернуто приложение; свернут\развернут лист, закрепления областей, масштабирования  
 
вся загвоздка в VisibleRange, ибо оно пляшет при изменении мастшабирования и закреплении областей  
 
 
"левая" координата с погрешностью 2-3 пикс. у меня вышла так:  
UserForm1.Left = (((.Width - .UsableWidth) + (.ActiveCell.Left - ActiveWindow.VisibleRange.Left) + .ActiveCell.Width + 17) * .ActiveWindow.Zoom / 100) + .ActiveWindow.Left + .Left  
 
признаться, не понял, как определить размер области, где в Excel идет нумерация строк (см. скрин) и влепил 17, кот. не учитывает то, что чем больше номер строки, тем больше это расстояние.  
 
end with
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


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


https://github.com/nervgh
 
Позиционирование формы относительной активной ячейки без API  
 
Обе координаты работают при:  
+ сворачивании приложения в окно/максимизации  
+ сворачивании листа в окно/максимизации  
+ скроллинге по X  
а также  
+ не влияет положение панелей управления  
 
Координата X работает при масштабировании, Y хромает. Если кто знает, как исправить, подскажите пожалуйста : )  
 
Обе координаты не работают при закреплении областей
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Уважаемый nerv!  
Начал пользоваться Вашей разработкой выпадающего списка "Выпадющий список с поиском (комбо). Версия 1.3 (23.10.2011)". Хочу обратиться к Вам с просьбой, даже с тремя просьбами:  
1. Напишите как сделать, чтобы выпадающий список вызывался по двойному клику. Заполнять необходимо более 800 строк в 3 столба и постояно нажимать "Ctrl+Enter" очень неудобно, проще вызывать по двойному клику.  
2. Как сделать чтобы можно было ввести только уникальные записи из базы, сейчас можно ввести все что угодно. В этом случае отсутствует возможность последующей фильтрации.  
3. Сделал чтобы чтобы список создавался из заготовленного "шаблона" из другого листа книги, но не понимаю как сделать, чтобы выпадающий список не появлялся в тех столбах, которых не в шаблоне (в шаблоне столбцы A, B, C хотелось бы выпадающий список можно было активизировать только в этих столбах основного листа.  
Извините за массу заданных вопросов, но Ваша разработка очень интересна и полезна в работе, и хочется подстроить ее под свои нужды.
 
kroha, привет, Малыш! ^_^  
 
Кидайте файлы на мыло (те, где планируется использовать надстройку, плюс саму надстройку) и четко сформулированные "хотелки" (можно скопипастить из Вашего сообщения выше, и если необходимо, дополнить). Сразу оговорюсь, помощь будет не бесплатна (впрочем, не стоит пугаться, чисто символически). Если условия Вас удовлетворяют, готов помочь с настройкой надстройки : )  
 
с уважением, nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Уважаемый nerv!  
Спасибо за быстрый ответ. Отправлю в понедельник, т.к. у меня все это на работе.
 
подскажмте как реализовать, что бы список формировался с другого листа и из конкретного столбца, руки видимо кривые)))
 
Это Lexey_fan? :)  
Посмотрите первые версии GIG_ant - там именно так и сделано.  
Или Вам на каком коде нужно сделать?
 
{quote}{login=Hugo}{date=29.10.2011 06:28}{thema=}{post}Это Lexey_fan? :)  
Посмотрите первые версии GIG_ant - там именно так и сделано.  
Или Вам на каком коде нужно сделать?{/post}{/quote}  
 
вы про что? не понял первого вопроса!    
 
смотрел, но более интерестным показался пост с прекреплённым файлом "post_270541.zip", не смог конкретно под свою задачку переписать: есть табличка(1 лист), на втором лесте список с именами юр лиц(колонка d), до этого делал это путём выподающего списка(не с помощью макроса), но выподающий список не отображал одновременно полного объёма информации, а вот этот макрос (post_270541.zip) полностью решает проблемму. что хотелось что бы при вызове этого макроса список формировался со 2 листа из колонки D
 
По первому вопросу - его бы не было, если бы Вы себя хоть как-то обозначили.
 
По делу - это вопрос к автору, но т.к. в коде есть такое:  
 
' Тут можно отсечь "шапку" таблицы, а также выставить условия, что и откуда загружать  
   Set objDDLRange = .Range(.Cells(1, i), .Cells(.Rows.Count, i).End(xlUp))  
 
то я себе позволил Вам намекнуть, где нужно смотреть :)
 
{quote}{login=Hugo}{date=29.10.2011 07:41}{thema=}{post}По делу - это вопрос к автору, но т.к. в коде есть такое:  
 
' Тут можно отсечь "шапку" таблицы, а также выставить условия, что и откуда загружать  
   Set objDDLRange = .Range(.Cells(1, i), .Cells(.Rows.Count, i).End(xlUp))  
 
то я себе позволил Вам намекнуть, где нужно смотреть :){/post}{/quote}  
Есл что то менять конкретно в этой строке, то я совсем не понимаю ничего)))))  
менял вот что With Worksheet("СП"):i = Column(5), результата не добился(((((
 
лично я в макросах не силен но по моему Hugo хотел намекнуть.  
.Cells(1, i) здесь 1 это номер столбца, замените на соответствующий, т.к. у Вас D то на 4. Хотя може я и не прав.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 След.
Читают тему
Наверх