У меня есть комбинированный список ActiveX в одной из таблиц Excel с несколькими вариантами выбора для выпадающего списка.
Когда пользователь вводит некоторые тексты в текстовое поле, он показывает выборки, которые совпадают с текстом подстановочным знаком.
Однако выпадающие списки не обновляются при срабатывании функции comboBox_Change (), если я не нажму кнопку со стрелкой вниз, тогда это будет отражать последний список.
Private Sub Workbook_Open()
Dim mainworkBook As Workbook, mainSheet
Set mainworkBook = ThisWorkbook
Set mainSheet = mainworkBook.Sheets("Sheet1")
mainSheet.ComboBox1.Clear
Dim Arr(5) As String
Arr(0) = "abc"
Arr(1) = "cde"
Arr(2) = "cdf"
Arr(3) = "cwd"
Arr(4) = "caw"
Arr(5) = "zsw"
With mainSheet.ComboBox1
.Clear
For c = 0 To UBound(Arr)
.AddItem Arr(c)
Next
'.ListIndex = 0
End With
mainSheet.ComboBox1.ListRows = (UBound(Arr) + 1)
mainSheet.ComboBox1.DropDown
End Sub
Код выше загружается при открытии рабочей книги для перечисления массива в выпадающих списках comboBox.
Private Sub ComboBox1_Change()
Dim mainworkBook As Workbook, mainSheet, poss
Set mainworkBook = ThisWorkbook
Set mainSheet = mainworkBook.Sheets("Sheet1")
Dim rng As Range, e, Arr(5) As String
Arr(0) = "abc"
Arr(1) = "cde"
Arr(2) = "cdf"
Arr(3) = "cwd"
Arr(4) = "caw"
Arr(5) = "zsw"
With mainSheet
e = .ComboBox1.Value
If e <> "" And (IsNumeric(Application.Match(e, Arr, False)) = False) Then
.ComboBox1.Clear
For c = 0 To UBound(Arr)
If (UCase(Arr(c)) Like "*" & UCase(e) & "*") Then
.ComboBox1.AddItem Arr(c)
End If
Next
ElseIf e = "" Then
.ComboBox1.Clear
.ComboBox1.ListWidth = .ComboBox1.ListWidth
For c = 0 To UBound(Arr)
.ComboBox1.AddItem Arr(c)
Next
'ElseIf (IsNumeric(Application.Match(e, Arr, False)) = True) Then
End If
'MsgBox (.ComboBox1.ListRows)
.ComboBox1.ListWidth = .ComboBox1.ListWidth
.ComboBox1.ListRows = (UBound(Arr) + 1)
'.ComboBox1.ListIndex = 0
.ComboBox1.DropDown
End With
End Sub
Код для comboBox_Change такой же, как указано выше. Заранее спасибо за помощь!