powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
14 сообщений из 14, страница 1 из 1
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637737
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой вопрос. У меня есть заполненный множеством значений combobox. Я хочу чтобы при вводе в ручную с клавиатуры каких-то символов, букв и т.д. содержимое combobox автоматически фильтровалось, и при вводе каждой последующей буквы кол-во вариантов сокращалось, и в конце концов останется один вариант; или если я задам слово, не имеющееся в списке комбобокса то допустимых значений для выбора совсем предложено не будет.
Например, в комбобоксе след. слова:

стол
полет
стрела
лето
кофе

Я ввожу с клавиатуры в текстовом поле комбобокса букву "о". Список значений автоматически сократится до тех слов, в которых есть буква "о", т.е. останутся:

стол
полет
лето
кофе

потом дописываю, например, буквы "л", получаем "ол" и в списке остается только

стол

Но если я стираю символ, например "о", то у меня возвращаются в комбобокс слова содержащие "л", т.е чтобы операция происходила в "обе стороны".
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637751
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настя Белова,

Сначала определимся VBA или VB6? И какой именно ComboBox, их тоже много
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637754
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой пример для VBA Forms, ComboBox. Новые значения показываются после ввода символов, вручную нужно раскрыть список.
Если необходимо по мере ввода чтобы из списка динамически выводился список, то был пример (может уже есть на форуме) объединение комбобокс + листбокс + правильная обработка событий - получаем нужный эффект

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim lsBuffer(4) As String
 
Private Sub ComboBox1_Change()
    ComboBox1.Clear
    
    For I = 0 To UBound(lsBuffer)
        If lsBuffer(I) Like "*" & ComboBox1.Text & "*" Then
            ComboBox1.AddItem lsBuffer(I)
        End If
    Next
End Sub

Private Sub UserForm_Activate()
    lsBuffer(0) = "стол"
    lsBuffer(1) = "полет"
    lsBuffer(2) = "стрела"
    lsBuffer(3) = "лето"
    lsBuffer(4) = "кофе"
    
    Call ComboBox1_Change
End Sub
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637760
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD, а если в всплывающем списке около 500 записей?
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637762
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я присвоила свойству RowSource значение,тем самым у меня выводиться в списке около 500 записей(которые находятся на отдельном листе)
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38637766
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настя Белова,

Не используйте RowSource, загружайте с листа в массив, потом работайте с ним
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38638902
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,а посмотрите пожалуйся, что у меня не так тут

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub UserForm_Initialize()
    
    iArrSource = Application.Range("Наименование!B1:B480").Value
    
    ComboBox1.RowSource = "" 'изменить значения этих двух свойств можно вручную
    ComboBox1.MatchEntry = fmMatchEntryNone 'причём один раз в дизайнере
    ComboBox1.List = iArrSource
   
End Sub

Private Sub ComboBox1_Change()
    Dim iSource As Variant, iFindText As Variant

    With ComboBox1
         iFindText = .Value: .Clear
         If iFindText <> "" Then
            For Each iSource In iArrSource
                If InStr(1, iSource, iFindText, _
                vbTextCompare) Then .AddItem iSource
            Next
         End If
    End With
End Sub


В этой строчке ошибка пишет
Код: vbnet
1.
   For Each iSource In iArrSource
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38638950
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Dim iSource As Variant

Private Sub UserForm_Initialize()
    
    iArrSource = Application.Range("Наименование!B1:B480").Value
    
    ComboBox1.RowSource = "" 'изменить значения этих двух свойств можно вручную
    ComboBox1.MatchEntry = fmMatchEntryNone 'причём один раз в дизайнере
    ComboBox1.List = iArrSource
   
End Sub

Private Sub ComboBox1_Change()
    Dim iFindText As Variant

    With ComboBox1
         iFindText = .Value: .Clear
         If iFindText <> "" Then
            For Each iSource In iArrSource
                If InStr(1, iSource, iFindText, _
                vbTextCompare) Then .AddItem iSource
            Next
         End If
    End With
End Sub
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38639052
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One, НИЧЕГО НЕ ИЗМЕНИЛОСЬ
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38639124
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настя Белова,

Переменную iArrSource нужно было объявить на уровне модуля, так как она не объявлена и видна только локально в процедуре UserForm_Initialize, а в ComboBox1_Change уже нет. Чтобы не было ошибок такого вида, когда переменная не объявлена явно, всегда используйте Option Explicit
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38641377
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private iArrSource As Variant

Private Sub UserForm_Initialize()
    'iArrSource = Array("стол", "полет", "стрела", "лето", "кофе")
    iArrSource = Application.Range("Наименование!B1:B480").Value
    
    ComboBox1.RowSource = "" 'изменить значения этих двух свойств можно вручную
    ComboBox1.MatchEntry = fmMatchEntryNone 'причём один раз в дизайнере
    ComboBox1.List = iArrSource
End Sub

Private Sub ComboBox1_Change()
    Dim iSource As Variant, iFindText As Variant

    With ComboBox1
         iFindText = .Value: .Clear
         If iFindText <> "" Then
            For Each iSource In iArrSource
                If InStr(1, iSource, iFindText, _
                vbTextCompare) Then .AddItem iSource
            Next
         End If
    End With
End Sub



чот не то
работает,но как то странно
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38641438
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настя Белова,

А что ожидала увидеть?) Какой код написан, то и происходит
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38641665
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Настя Белова,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Option Explicit

Private Const CB_FINDSTRING = &H14C
Private Const CB_SHOWDROPDOWN = &H14F
Private Const LB_FINDSTRING = &H18F
Private Const CB_ERR = (-1)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    
Private Sub Combo1_GotFocus()
    SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)

    Dim CB As Long
    Dim FindString As String
    
    If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub
    
    If Combo1.SelLength = 0 Then
        FindString = Combo1.Text & Chr$(KeyAscii)
    Else
        FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii)
    End If
    
    SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&

    CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString)
    
    If CB <> CB_ERR Then
        Combo1.ListIndex = CB
        Combo1.SelStart = Len(FindString)
        Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart
    Else
        Combo1.Text = FindString
        Combo1.SelStart = Len(FindString)
    End If
    
    KeyAscii = 0
    
End Sub
...
Рейтинг: 0 / 0
Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
    #38649017
Настя Белова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать чтобы при нахождения нужного слова оно полность появлялось в строчке комбо.
потому что сейчас в комбо вбила КР,раскрываю комбо он находит кровать,нажимаю на слова кровать и комбо пустой
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]