Можно создать свою панель инструментов. Добавить туда выпадающий список ComboBox. [vba]
Код
Set MyBar = CommandBars.Add(ПанельИмя, msoBarTop, , True) Set MyBox = MyBar.Controls.Add(msoControlComboBox)
[/vba] А вот как раскрыть его, так же как раскрываем кликом мышки по треугольничку или нажатием кнопки Down после выделения ComboBox'а? Чтобы список открылся и показал что в нем есть. Программно конечно.
Можно создать свою панель инструментов. Добавить туда выпадающий список ComboBox. [vba]
Код
Set MyBar = CommandBars.Add(ПанельИмя, msoBarTop, , True) Set MyBox = MyBar.Controls.Add(msoControlComboBox)
[/vba] А вот как раскрыть его, так же как раскрываем кликом мышки по треугольничку или нажатием кнопки Down после выделения ComboBox'а? Чтобы список открылся и показал что в нем есть. Программно конечно.Bagir
Сообщение отредактировал Bagir - Вторник, 15.01.2013, 17:12
Serge_007, теги на всех сайтах разные. Это раз. Видя ошибку, я поправил, это два. Вы же вероятно потом поверх исправили старый еще мной не редактированный текст.
Serge_007, теги на всех сайтах разные. Это раз. Видя ошибку, я поправил, это два. Вы же вероятно потом поверх исправили старый еще мной не редактированный текст.Bagir
Тогда скажите, чем кнопка тега означающая Код VBA (что написано во всплывающей подсказке при наведении на него курсора) на этом форуме отличается от кнопки на программерсфорум, где Вы кросс-постите? Но там Вы применили её, а здесь - теги формулы (со знаком в виде символа функций листа Excel), которые никакого отношения к VBA не имеет?
Цитата (ikki)
а дальше что?
А дальше вводишь что-нибудь руками и жмешь Enter По крайней мере так Bagir утверждает
ЗЫ
Цитата (Bagir)
Видя ошибку, я поправил
Вот ТЕПЕРЬ поправили
Цитата (Bagir)
теги на всех сайтах разные
Тогда скажите, чем кнопка тега означающая Код VBA (что написано во всплывающей подсказке при наведении на него курсора) на этом форуме отличается от кнопки на программерсфорум, где Вы кросс-постите? Но там Вы применили её, а здесь - теги формулы (со знаком в виде символа функций листа Excel), которые никакого отношения к VBA не имеет?
Цитата (ikki)
а дальше что?
А дальше вводишь что-нибудь руками и жмешь Enter По крайней мере так Bagir утверждает
мде... в который раз убеждаюсь, что плохо продуманный и криво реализованный интерфейс может сильно испортить жизнь не только пользователям, но и разработчику. но что в эту тёплую компанию людей с закипающими мозгами надо ещё и половину экселевского рунета затянуть... и на киберфоруме тоже: http://www.cyberforum.ru/vba/thread762350.html
мде... в который раз убеждаюсь, что плохо продуманный и криво реализованный интерфейс может сильно испортить жизнь не только пользователям, но и разработчику. но что в эту тёплую компанию людей с закипающими мозгами надо ещё и половину экселевского рунета затянуть... и на киберфоруме тоже: http://www.cyberforum.ru/vba/thread762350.html ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Вторник, 15.01.2013, 17:31
Да я часто пишу сразу на пяти форумах. Люди разные, идеи тоже. И уж поверьте теги тоже! Сообщение свое просто копировал, но когда увидел что вылезла формула, полез смотреть тег и править. Но потом каким то велением пост опять обновился на формулу с вашим комментарием. Могу только предположить, что мой пост мы правили одновременно, но я нажал отправить чуть раньше. И мои изменения были затерты вашими. Да не суть, давайте забудем, я по большей части стараюсь обычно правильно писать.
Ну а для чего мне нужно раскрытие списка программно, ну что сказать, а вам действительно надо чтобы я тут всех грузил своими задачами? Ну воля ваша, просто если рассказал бы в двух словах, то смысл все равно был бы не ясен, и выглядело бы это все как то не очень.
Не вдаваясь в подробности опишу ситуацию. Есть список, большой такой. Есть поле поиска. Начинаем забивать в него фразу и наш список сдувается, отсеивая несовпадения. Ну а теперь ближе к "телу". У меня есть палень в Excel. На ней сомбобокс. Есть база клиентов. Операторы кликают по комбо мышкой и забивают туда имя клиента. Если он один то загружаются его данные. Если тесок много, то нужно выбрать требуемого. Для этого и использую не просто текстовое поле, а комбобокс. Если совпадений много, но комбо заполняется ими, и далее макрос ждет дальшейшего выбора оператора. Оператор мышкой кликает по комбо и выбирает нужного. Что сделал: Если совпадений несколько, то после ввода имени и нажатия ентер, комбо сразу раскрывается. При этом клавишей вниз можно сразу перепрыгнуть в список и выбрать нужного. Видя сразу всех это делать намного удобней. Ну а почему я использую именно комбобокс а не кучу других инетерсных фишек, я в двух словах тоже не скажу. В моей ситуации это удобней. Ну вот как то так.
Да я часто пишу сразу на пяти форумах. Люди разные, идеи тоже. И уж поверьте теги тоже! Сообщение свое просто копировал, но когда увидел что вылезла формула, полез смотреть тег и править. Но потом каким то велением пост опять обновился на формулу с вашим комментарием. Могу только предположить, что мой пост мы правили одновременно, но я нажал отправить чуть раньше. И мои изменения были затерты вашими. Да не суть, давайте забудем, я по большей части стараюсь обычно правильно писать.
Ну а для чего мне нужно раскрытие списка программно, ну что сказать, а вам действительно надо чтобы я тут всех грузил своими задачами? Ну воля ваша, просто если рассказал бы в двух словах, то смысл все равно был бы не ясен, и выглядело бы это все как то не очень.
Не вдаваясь в подробности опишу ситуацию. Есть список, большой такой. Есть поле поиска. Начинаем забивать в него фразу и наш список сдувается, отсеивая несовпадения. Ну а теперь ближе к "телу". У меня есть палень в Excel. На ней сомбобокс. Есть база клиентов. Операторы кликают по комбо мышкой и забивают туда имя клиента. Если он один то загружаются его данные. Если тесок много, то нужно выбрать требуемого. Для этого и использую не просто текстовое поле, а комбобокс. Если совпадений много, но комбо заполняется ими, и далее макрос ждет дальшейшего выбора оператора. Оператор мышкой кликает по комбо и выбирает нужного. Что сделал: Если совпадений несколько, то после ввода имени и нажатия ентер, комбо сразу раскрывается. При этом клавишей вниз можно сразу перепрыгнуть в список и выбрать нужного. Видя сразу всех это делать намного удобней. Ну а почему я использую именно комбобокс а не кучу других инетерсных фишек, я в двух словах тоже не скажу. В моей ситуации это удобней. Ну вот как то так.Bagir
хм... а не такой уж и плохой вариант интерфейса. я делал практически для такой же задачи, но на userform и с textbox'ом и listbox'ом. в котором иногда (но не так уж и часто) отфильтровывался список до одной записи.
надо подумать. Bagir, спасибо за идею.
пс. и чем вас не устраивает вариант с SendKeys?
хм... а не такой уж и плохой вариант интерфейса. я делал практически для такой же задачи, но на userform и с textbox'ом и listbox'ом. в котором иногда (но не так уж и часто) отфильтровывался список до одной записи.
надо подумать. Bagir, спасибо за идею.
пс. и чем вас не устраивает вариант с SendKeys?ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Вторник, 15.01.2013, 18:16
Так же и у меня. Есть панель и есть форма. По сути комбобокс на панели дублирует текстовое поле и список на форме. Просто кому то удобней работать с панелью, а кому то с формой. Да и опять же, ситуации разные. Иногда удобней вызвать форму и найти клиента там, а бывает быстрей найти используя комбобокс на панели. Но если совпадений несколько, то вот тут то мне и захотелось раскрыть список. Но сделать это красиво увы похоже никак. Я заметил, что если перепрыгнуть на панель и добраться курсором до комбобокса, то нажатие "Вниз" раскрывает его. От сюда пока единственный вариант [vba]
Код
MyBox.SetFocus SendKeys "{DOWN}"
[/vba] Получается что после ввода условия, список сразу раскрывается, и перейти в него можно просто опять же нажав вниз. Все это можно сделать с клавы без мышки, что при потоке экономит время. А если программно не раскрыть список, то нажатие вниз приводит к перебору всех значений, но без отображения списка. Просто на панель большой список не приделаешь, места съест, да и незачем, а так вполне интересно, если обычно требуется только текстовое поле для ввода и отображения, но в редких случаях нужен список.
Ну а SendKeys, ну не знаю, как то просто не по душе. Конечно было бы лучше написать MyBox.Откройся, но увы, такого нет.
Так же и у меня. Есть панель и есть форма. По сути комбобокс на панели дублирует текстовое поле и список на форме. Просто кому то удобней работать с панелью, а кому то с формой. Да и опять же, ситуации разные. Иногда удобней вызвать форму и найти клиента там, а бывает быстрей найти используя комбобокс на панели. Но если совпадений несколько, то вот тут то мне и захотелось раскрыть список. Но сделать это красиво увы похоже никак. Я заметил, что если перепрыгнуть на панель и добраться курсором до комбобокса, то нажатие "Вниз" раскрывает его. От сюда пока единственный вариант [vba]
Код
MyBox.SetFocus SendKeys "{DOWN}"
[/vba] Получается что после ввода условия, список сразу раскрывается, и перейти в него можно просто опять же нажав вниз. Все это можно сделать с клавы без мышки, что при потоке экономит время. А если программно не раскрыть список, то нажатие вниз приводит к перебору всех значений, но без отображения списка. Просто на панель большой список не приделаешь, места съест, да и незачем, а так вполне интересно, если обычно требуется только текстовое поле для ввода и отображения, но в редких случаях нужен список.
Ну а SendKeys, ну не знаю, как то просто не по душе. Конечно было бы лучше написать MyBox.Откройся, но увы, такого нет.Bagir
ну... способ считается ненадёжным. но это для общего случая. здесь я никакого криминала не вижу. какая разница, как окно с текстбоксом получит сообщение?..
единственное предложение - м.б. на всякий случай после MyBox.SetFocus проверять, что комбик таки получил фокус?
ну... способ считается ненадёжным. но это для общего случая. здесь я никакого криминала не вижу. какая разница, как окно с текстбоксом получит сообщение?..
единственное предложение - м.б. на всякий случай после MyBox.SetFocus проверять, что комбик таки получил фокус?ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Мысль, взаимное спасибо, действительно стоит проверить, чтобы не слать Down кому попало. Есть еще причина, почему не понравился этот способ. Еще сам не все проверил, но пока вижу следующее: Свое текстовое поле на панели создаю так [vba]
[/vba] Процедура ПанельПоиск будет запущена после того как чтото введем и нажмем Enter в комбике.
Но если в ней попробовать выполнить ___.SetFocus, то ловим ошибку Method 'SetFocus' of object '_CommandBarComboBox' failed Пока не понял почему, но нашел как обойти. [vba]
Код
Application.OnTime Now + TimeValue("00:00:01"), "РаскрытьСписок"
[/vba] [vba]
Код
Sub РаскрытьСписок() CommandBars.Item(ПанельИмя).Controls.Item(3).SetFocus SendKeys "{DOWN}" End Sub
[/vba] где Item(3) это индекс моего комбика
Мысль, взаимное спасибо, действительно стоит проверить, чтобы не слать Down кому попало. Есть еще причина, почему не понравился этот способ. Еще сам не все проверил, но пока вижу следующее: Свое текстовое поле на панели создаю так [vba]
[/vba] Процедура ПанельПоиск будет запущена после того как чтото введем и нажмем Enter в комбике.
Но если в ней попробовать выполнить ___.SetFocus, то ловим ошибку Method 'SetFocus' of object '_CommandBarComboBox' failed Пока не понял почему, но нашел как обойти. [vba]
Код
Application.OnTime Now + TimeValue("00:00:01"), "РаскрытьСписок"
[/vba] [vba]
Код
Sub РаскрытьСписок() CommandBars.Item(ПанельИмя).Controls.Item(3).SetFocus SendKeys "{DOWN}" End Sub
Ну что сказать, да, конечно это несколько засоряет поисковик, но по итогам имею черту постить ответы везде где задавал вопросы, если конечно ответы есть. Да и как уже говорил, на каждом форуме народ свой. В том числе и гуру, которые могут чем то помочь. Взять даже сегодняшний пост, который кросил на пяти форумах. 2 без движения вообще. 1 не о том и 2 (включая этот) с идеями и обсуждением. Ну вот собственно и ответ.
Ну что сказать, да, конечно это несколько засоряет поисковик, но по итогам имею черту постить ответы везде где задавал вопросы, если конечно ответы есть. Да и как уже говорил, на каждом форуме народ свой. В том числе и гуру, которые могут чем то помочь. Взять даже сегодняшний пост, который кросил на пяти форумах. 2 без движения вообще. 1 не о том и 2 (включая этот) с идеями и обсуждением. Ну вот собственно и ответ.Bagir
Ну я уже как-то говорил тебе, что ничего плохого в этом не вижу (если межфорумный кросс не запрещён правилами на каком-то из кросс-форумов, конечно). Я и сам несколько раз кроссил
Цитата (Bagir)
по итогам имею черту постить ответы везде где задавал вопросы
А вот этого-то мы и не знаем... Приятно что такая черта у Вас есть, но если бы это было написано например в подписи Кстати, реально, без напоминаний, отписываются единицы.
Цитата (Bagir)
на каждом форуме народ свой. В том числе и гуру
И я "свой" на каждом форуме? Посмотрите, на программерс у меня - 1 227 поста, на кибере - 1 285, на SQL - 1 343, у Шмуйловича -2 418, здесь - 5492, на планете (старой) - 11 050. А ведь есть ещё и малопосещаемые форумы и форумы по VBA, на них я тоже бываю Так что подавляющее большинство - это одни и те же люди. Но согласен, есть те, кто сидят только на "своём" форуме, но их мало
[offtop]
Цитата (KuklP)
ОФФ
Серёг, у нас теперь есть теги оформления оффтопа :)[/offtop]
Цитата (KuklP)
Одного меня это напрягает?
Ну я уже как-то говорил тебе, что ничего плохого в этом не вижу (если межфорумный кросс не запрещён правилами на каком-то из кросс-форумов, конечно). Я и сам несколько раз кроссил
Цитата (Bagir)
по итогам имею черту постить ответы везде где задавал вопросы
А вот этого-то мы и не знаем... Приятно что такая черта у Вас есть, но если бы это было написано например в подписи Кстати, реально, без напоминаний, отписываются единицы.
Цитата (Bagir)
на каждом форуме народ свой. В том числе и гуру
И я "свой" на каждом форуме? Посмотрите, на программерс у меня - 1 227 поста, на кибере - 1 285, на SQL - 1 343, у Шмуйловича -2 418, здесь - 5492, на планете (старой) - 11 050. А ведь есть ещё и малопосещаемые форумы и форумы по VBA, на них я тоже бываю Так что подавляющее большинство - это одни и те же люди. Но согласен, есть те, кто сидят только на "своём" форуме, но их мало
[offtop]
Цитата (KuklP)
ОФФ
Серёг, у нас теперь есть теги оформления оффтопа :)[/offtop]Serge_007