Подскажите, пожалуйста, по изменению размера списка комбобокса (комбобокс с поиском при вводе). Меняю через .ListRows = .ListCount, но иногда остается серая область, что не так?
Доброго времени суток,
Подскажите, пожалуйста, по изменению размера списка комбобокса (комбобокс с поиском при вводе). Меняю через .ListRows = .ListCount, но иногда остается серая область, что не так? user0
Каким образом у Вас заполняются ячейки столбца А? Если формулой, которая может выдать "" (или еще как, но если в столбце А есть что=то типа ="", то это "" - это не пусто, это именно "". Его и может показывать
Каким образом у Вас заполняются ячейки столбца А? Если формулой, которая может выдать "" (или еще как, но если в столбце А есть что=то типа ="", то это "" - это не пусто, это именно "". Его и может показывать_Boroda_
Столбец А заполняется неразрывным списком уникальных чисел, все что не число удаляется. Ситуация, когда в А будет null/"пустая строка" не должна возникнуть.
Список в комбобоксе заполняется из массива [vba]
Код
arrIn = ws.Range("A2:B" & ws.Range("A2").End(xlDown).Row)
[/vba]
Потом при печати в комбобоксе он фильтруется: [vba]
Код
For i = cboNum.ListCount - 1 To 0 Step -1 If cboNum.List(i, 0) = 0 Then cboNum.RemoveItem i Next
[/vba] тут-то и возникает то серое поле
Вот, кстати, если убрать цикл "фильтрации" то отанутся пустые белые строки как из вашего примера с =""
Столбец А заполняется неразрывным списком уникальных чисел, все что не число удаляется. Ситуация, когда в А будет null/"пустая строка" не должна возникнуть.
Список в комбобоксе заполняется из массива [vba]
Код
arrIn = ws.Range("A2:B" & ws.Range("A2").End(xlDown).Row)
[/vba]
Потом при печати в комбобоксе он фильтруется: [vba]
Код
For i = cboNum.ListCount - 1 To 0 Step -1 If cboNum.List(i, 0) = 0 Then cboNum.RemoveItem i Next
[/vba] тут-то и возникает то серое поле
Вот, кстати, если убрать цикл "фильтрации" то отанутся пустые белые строки как из вашего примера с ="" user0
попробуйте вот так (добавил 2 строчки со звездочками) [vba]
Код
Select Case cboNum.ListCount Case Is = 0 btnClear.SetFocus: cboNum.SetFocus Case 1 To 10 btnClear.SetFocus: cboNum.SetFocus '***** cboNum.ListRows = cboNum.ListCount 'resize list to actual >10 cboNum.DropDown 'show list if there are items only Case Is > 10 btnClear.SetFocus: cboNum.SetFocus '***** cboNum.ListRows = 10 'resize list to max of 10 cboNum.DropDown 'show list if there are items only End Select
[/vba]
попробуйте вот так (добавил 2 строчки со звездочками) [vba]
Код
Select Case cboNum.ListCount Case Is = 0 btnClear.SetFocus: cboNum.SetFocus Case 1 To 10 btnClear.SetFocus: cboNum.SetFocus '***** cboNum.ListRows = cboNum.ListCount 'resize list to actual >10 cboNum.DropDown 'show list if there are items only Case Is > 10 btnClear.SetFocus: cboNum.SetFocus '***** cboNum.ListRows = 10 'resize list to max of 10 cboNum.DropDown 'show list if there are items only End Select
Private Sub cboNum_Populate() Dim arrIn As Variant, arrOut As Variant Dim i As Long, j As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("test") arrIn = ws.Range("A2:B" & ws.Range("A2").End(xlDown).Row) For i = 1 To UBound(arrIn) If arrIn(i, 1) Like "*" & cboNum.Text & "*" Or arrIn(i, 2) Like "*" & cboNum.Text & "*" Then j = j + 1 arrIn(j, 1) = arrIn(i, 1) arrIn(j, 2) = arrIn(i, 2) End If Next ReDim arrOut(1 To j, 1 To 2) For i = 1 To j arrOut(i, 1) = arrIn(i, 1) arrOut(i, 2) = arrIn(i, 2) Next cboNum.List = arrOut End Sub
[/vba]
[vba]
Код
Private Sub cboNum_Populate() Dim arrIn As Variant, arrOut As Variant Dim i As Long, j As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("test") arrIn = ws.Range("A2:B" & ws.Range("A2").End(xlDown).Row) For i = 1 To UBound(arrIn) If arrIn(i, 1) Like "*" & cboNum.Text & "*" Or arrIn(i, 2) Like "*" & cboNum.Text & "*" Then j = j + 1 arrIn(j, 1) = arrIn(i, 1) arrIn(j, 2) = arrIn(i, 2) End If Next ReDim arrOut(1 To j, 1 To 2) For i = 1 To j arrOut(i, 1) = arrIn(i, 1) arrOut(i, 2) = arrIn(i, 2) Next cboNum.List = arrOut End Sub
For i = 1 To UBound(arrIn) If InStr(1, arrIn(i, 1), cboNum.Text) Or InStr(1, arrIn(i, 2), cboNum.Text) Then j = j + 1 arrIn(j, 1) = arrIn(i, 1) arrIn(j, 2) = arrIn(i, 2) End If Next
[/vba]
И это мона попроще: [vba]
Код
For i = 1 To UBound(arrIn) If InStr(1, arrIn(i, 1), cboNum.Text) Or InStr(1, arrIn(i, 2), cboNum.Text) Then j = j + 1 arrIn(j, 1) = arrIn(i, 1) arrIn(j, 2) = arrIn(i, 2) End If Next
KuklP Спасибо и ваш вариант работает, но надо потом еще туда доп проверку втиснуть на пустой массив при вводе отсутствующего значения в поле комбобокса, так что смена фокуса попроще будет
появляются в первом примере, патамушта массив полупустой.
а я уже стал грешить на то, что в win10+office2016 эти списки немного по другому отрисовываются, нежели чем в win7-8+2013
nilem Спасибо, то что нужно!
KuklP Спасибо и ваш вариант работает, но надо потом еще туда доп проверку втиснуть на пустой массив при вводе отсутствующего значения в поле комбобокса, так что смена фокуса попроще будет
Саш, появляются в первом примере, патамушта массив полупустой
А вот и нет. Если б у меня появлялись, я б не спрашивал. У меня там нормально все отрабатывает win10+office2013 64 бит А про полупустой я примерно и хотел как раз сказать на примере ="" Ну ладно, уже неважно
Саш, появляются в первом примере, патамушта массив полупустой
А вот и нет. Если б у меня появлялись, я б не спрашивал. У меня там нормально все отрабатывает win10+office2013 64 бит А про полупустой я примерно и хотел как раз сказать на примере ="" Ну ладно, уже неважно_Boroda_
, что вовсе не означает, что это "иногда" у него в примере есть - я, конечно, понимаю, что user0 человек адекватный, но сколько уже подобных примеров на форуме было? А про конфигурацию речь вообще с 9 поста пошла. Так что нечего тут ухмыляться [/offtop]
, что вовсе не означает, что это "иногда" у него в примере есть - я, конечно, понимаю, что user0 человек адекватный, но сколько уже подобных примеров на форуме было? А про конфигурацию речь вообще с 9 поста пошла. Так что нечего тут ухмыляться [/offtop]_Boroda_
А вот у меня на 20 тож все нормально, но на 11 - нет (как на скриншоте из первого поста)
upd хотя нет..не нормально, если набираю 20 быстро, то проблем нет, если есть задержка в полсекунды между цифрами то появляется "серая область" с 11 как ни набирай всегда появляется серое.
это я про оригинальный файл, если что )
А вот у меня на 20 тож все нормально, но на 11 - нет (как на скриншоте из первого поста)
upd хотя нет..не нормально, если набираю 20 быстро, то проблем нет, если есть задержка в полсекунды между цифрами то появляется "серая область" с 11 как ни набирай всегда появляется серое.