Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2012, 00:22   #11
Евгений ГВС
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 43
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Обработка событий теперь осуществляется одной строкой для всех элементов управления:
Если не затруднит, можно описать этот прием без привязки к конкретному примеру?
Евгений ГВС вне форума Ответить с цитированием
Старый 26.03.2013, 19:43   #12
jobsap21
Новичок
Джуниор
 
Регистрация: 27.04.2010
Сообщений: 1
По умолчанию

Здравствуйте!

Может быть кому-то пригодится найденное мною решение на форумах и немного доработанное... Но...

Сразу спешу предупредить, что все же один недочет остаётся: стрелки на клавиатуре вверх и вниз будут приводить к попаданию в комбу первого значения из списка. Но, если приучить пользователей выбирать необходимый вариант мышкой - механизм вполне срабатывает.

Public client, rez, p As Boolean, r, nf&
-----------------------------------------

Private Sub UserForm_Initialize()

' при открытии формы загружаем в комбу необходимый список

client = Sheets("Клиенты").[Клиенты]
With cb
.List = client
End With

End Sub
-----------------------------------------
Private Sub cb_Change()

Dim s, r&, n&

client = Sheets("Клиенты").[Клиенты]

Application.ScreenUpdating = True

If cb.Text = "" Then cb.List = client

s = UCase(cb.Text)
a = Len(s)

If a = 0 Then GoTo finishSub

rez = Application.Transpose(client) ' копируем весь массив в rez
nf = UBound(client)

For Each s In Split(s, "")
For r = 1 To nf 'бежим по массиву rez , ищем вхождения
If UCase(rez(r)) Like "*" & s & "*" Then
n = n + 1
rez(n) = rez(r) ' если есть вхождение, то записываем его в rez же, затирая ненужную информацию
End If
Next
If n > 0 Then
nf = n
n = 0
Else
Exit For
End If
Next

If nf = 0 Then nf = 1

ReDim Preserve rez(1 To nf)

Application.EnableEvents = False

With cb
.MatchEntry = 2
.List = rez ' заносим найденное в комбо
.AutoWordSelect = True
.AutoSize = False
.DropDown ' распахиваем комбо
End With

finishSub:

Application.EnableEvents = True

End Sub

-----------------------------------------
Private Sub CmdButt_AddNewNote_Click()
' при нажатии на кнопку, к примеру, добавление новой записи в отчет
' загружаем в комбу ПОЛНЫЙ первоначальный список
client = Sheets("Клиенты").[Клиенты]

With cb
.List = client
End With
' запоминаем индекс списка и прибаляем - если надо - количество строк
' смещения нахождения нашего списка на листе источнике
b = (cb.ListIndex + 1) + 2
' фиксируем необходимое значение из листа источника
с = Sheets("Клиенты").Cells(b, 9).Value
'вставляем, куда требуется
ActiveCell.Value = с

End Sub
jobsap21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выпадающий список ComboBox pu4koff Win Api 29 27.02.2014 17:23
Как в Combobox убрать список? Alexi Компоненты Delphi 10 04.01.2011 08:25
ComboBox как сделать чтобы список в нем формировался с другой страницы? sttafi Microsoft Office Excel 11 12.05.2009 17:45
Потестируйте программу (поиск похожих MP3 файлов) mutabor Софт 9 28.10.2008 14:01