на форме есть combobox, в событии combobox_KeyUp я собираю новый список из диапазона ячеек на листе на основании введенного значений (например ввел букву а, собрался список со словами которые начинаются на букву "а" и т.д), но когда таких совпадений нет, то под комбобоксом продолжает висеть список с одной пустой строкой, мне нужно ее скрыть
Код
Private Sub combobox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'..........
Call сформировать_список(combobox.value)
If combobox.ListCount = 1 And combobox.List(0) = "" Then
свернуть список???
else
combobox.DropDown
end if
'...........
end sub
ИЗМЕНЕНО: есть пара неплохих решений, описание и файл пример в посту #8 ниже
Вопрос 1. Если наводим (не щелкаем) мышку на список под Combobox, то строчка подсвечивается. Как обратиться к этому элементу? Конкретно нужно удалить выделенный элемент (В отличие от выбора стрелками - Combobox.Value остается пустым
Вопрос 2. Даже если я щелкну мышкой по элементу, то он попадает в основную (верхнюю строку), но остается выделенным, и опять Combobox.Value у меня в данном случае возвращает пустоту
Вопрос 3. Когда список "вывалился", если крутить колесо, то крутится страница, и список "отрывается" от ComboBox, как побороть? Может закрепить список, может запретить скрол.......
Как всегда надеюсь на вашу помощь, уважаемые Гуру
Изменено: guzen_pilot - 26.07.2016 10:34:08(вопроос №1 и №2 решены)
Имеем: Список уникальный значений (подойдет для работы с фамилиями) и Combobox на листе(1) Что хотим: при щелчке на Combobox раскрывается список взятый с листа, затем по мере ввода текста, из этого списка удаляются строки которые не соответствуют введенному тексту. Что не делает: не сортирует и не удаляет повторы, не добавляет в базовый список введенные значения - есть куда стремиться
вот код:
Код
Sub ComboBox1_GotFocus()
ComboBox1.Value = ""
ComboBox1.Clear
ComboBox1.MatchEntry = fmMatchEntryNone
new_list
ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 38 Or KeyCode = 40 Then Exit Sub 'не реагируем на стреки вниз и вверх
new_list
End Sub
Private Sub ComboBox1_Change()
ComboBox1.DropDown
End Sub
Sub new_list()
prew = ComboBox1.Value
arr = Sheets(1).UsedRange.Columns(1).Value
n = 0
ReDim l_arr(n)
For i = 1 To UBound(arr)
If InStr(1, UCase(arr(i, 1)), UCase(prew)) > 0 Then
ReDim Preserve l_arr(n)
l_arr(n) = arr(i, 1)
n = n + 1
End If
Next
ComboBox1.List = l_ar
End Sub
Во Вложении пример с настолько подробными комментариями, чтобы было понятно мне год назад Спасибо большое Dima S, без него ничего не получилось бы
Суть: при открытии UserForm под ней, на листе куча ячеек с информацией, они "рябят" и чтобы не мешали работать с формой, решил сделать затемнение вокруг формы. Просто создал черный прямоугольник, подкрутил прозрачность, заодно форму сделал модальной, при щелчке вне формы, она закрывается. В общем убил двух зайцев, да и смотрится неплохо. Выкладываю простенький пример, может кому сгодится.
Друзья, прошу не судить строго если вдруг это никому не нужно, или все и так знают, или уже 100 раз другие делали....
Друзья, очередной раз мне больше не к кому обратиться. Имеем: табличку в которой динамическое количество строк и столбцов с мин и макс размерами, остальные скрываем Что хотим: изменением ширины столбцов и высоты строк подогнать не скрытый диапазон под лист А4 дома я работаю на 2013 и все что хотел - сделал, но на работе попробовал на 2007-ом, там не работает как мне нужно, конкретно: высота строк слишком большая сделал пример на основании своего рабочего, в коде конкретно указал проблемные участки
Вопросы которые я не могу понять: 1. ширина_столбца = ширина_листа_в_пикселях / кол_столбцов *коэфф, где коэфф = [a1].columnwidth / [a1].width при этом ширина рабочей области упорно вылазит за пределы листа 2. на 2007 при построчном проходе по коду все делается правильно, а при нормальной работе - как реакция на собитие, то нет (высота строк не правильная) чую корень зла скрыт в PageSetup и Application.ScreenUpdating
Уважаемые форумчане, подскажите как грамотно реализовать нечто подобное:
Код
With Worksheets("Лист1").Shapes.группа(1)
.AddLine 1,2,3,4
.AddLine 5,6,7,8
End With
With Worksheets("Лист1").Shapes.группа(2)
.AddLine 1,2,3,4
.AddLine 5,6,7,8
End With
Worksheets("Лист1").Shapes.группа(1).Line.Weight = 3
то есть создавать однотипные объекты в разных группах, а потом работать отдельно с каждой группой головой понимаю, что можно, но найти не смог
Есть желание видеть какую-нибудь анимацию во время выполнения макроса (30сек-2мин) мысли следующие: 1. через WebBrowser открывать gif - анимированную картинку (мне не понравилось, что картинку нужно "таскать" рядом с файлом и с размерами пока не разбирался. Еще в голове вариант сохранить ее на лист в книге, а при необходимости сначала "вытаскивать" в папку как картинку, потом уже загружать через браузер, и перед закрытием удалять) 2. вставить статичное изображение фоном в юзерформу, и там вращать. как я понял - два макроса одновременно делать нельзя, но можно по одному в каждой книге, соответственно необходимо программно создать вторую книгу с макросом и формой, и пока выполняется макрос в первой книге, показывать "анимацию" второй Как думаете, реально или замудрил? В интернете нашел достаточно подобного рода пожеланий, но ни одной более менее дельной реализации. я взялся, значит сделаю. Результат обещаю скинуть
На лист вставленно изображение с привязанным макросом, по щелчку заменяется на другое изображение, можно как-нибудь анимировать эффект растворения? Уже весь интернет перерыл, должно же быть какое-нибудь свойство типа прозрачности всего изображения (не фона) хотя бы использовать формат / эффекты для рисунка / сглаживание только само сглаживание менять кодом
При запуске формы, код выполняется, но в конце все зависает и приходится убивать процесс через диспетчер. Сделал пример, но там все работает, как бы я не старался, поэтому вот полная версия https://yadi.sk/i/Xj_2xPOWpeajU Уже три дня голову ломаю, что только не делал. Открываем ИШР, попадаем на вкладку "ввод данных", нажимаем на кнопку "Показать форму", в открывшейся форме в TextBox-е "Название" пишем "ЕЙСК" и нажимаем кнопку "Найти". Программка найдет и вставит нужные данные в форму, но при этом все зависнет