Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменение размера списка комбобокса - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение размера списка комбобокса (Макросы/Sub)
Изменение размера списка комбобокса
user0 Дата: Понедельник, 09.10.2017, 10:05 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 125
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени суток,

Подскажите, пожалуйста, по изменению размера списка комбобокса (комбобокс с поиском при вводе).
Меняю через .ListRows = .ListCount, но иногда остается серая область, что не так?
К сообщению приложен файл: 8442946.xlsm(35Kb)
 
Ответить
СообщениеДоброго времени суток,

Подскажите, пожалуйста, по изменению размера списка комбобокса (комбобокс с поиском при вводе).
Меняю через .ListRows = .ListCount, но иногда остается серая область, что не так?

Автор - user0
Дата добавления - 09.10.2017 в 10:05
_Boroda_ Дата: Понедельник, 09.10.2017, 10:34 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11525
Репутация: 4744 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Каким образом у Вас заполняются ячейки столбца А?
Если формулой, которая может выдать "" (или еще как, но если в столбце А есть что=то типа ="", то это "" - это не пусто, это именно "". Его и может показывать
К сообщению приложен файл: 8442946_1.xlsm(28Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКаким образом у Вас заполняются ячейки столбца А?
Если формулой, которая может выдать "" (или еще как, но если в столбце А есть что=то типа ="", то это "" - это не пусто, это именно "". Его и может показывать

Автор - _Boroda_
Дата добавления - 09.10.2017 в 10:34
user0 Дата: Понедельник, 09.10.2017, 10:53 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 125
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Столбец А заполняется неразрывным списком уникальных чисел, все что не число удаляется. Ситуация, когда в А будет 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
Дата добавления - 09.10.2017 в 10:53
_Boroda_ Дата: Понедельник, 09.10.2017, 10:57 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11525
Репутация: 4744 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Это все понятно, код мы читать умеем. Вы приложите файл, в котором эти серые появляются


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЭто все понятно, код мы читать умеем. Вы приложите файл, в котором эти серые появляются

Автор - _Boroda_
Дата добавления - 09.10.2017 в 10:57
nilem Дата: Понедельник, 09.10.2017, 11:09 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1276
Репутация: 463 ±
Замечаний: 0% ±

Excel 2013
попробуйте вот так (добавил 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]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепопробуйте вот так (добавил 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]

Автор - nilem
Дата добавления - 09.10.2017 в 11:09
KuklP Дата: Понедельник, 09.10.2017, 11:15 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
[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
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение[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
[/vba]

Автор - KuklP
Дата добавления - 09.10.2017 в 11:15
KuklP Дата: Понедельник, 09.10.2017, 11:20 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Вы приложите файл, в котором эти серые появляются
Саш, появляются в первом примере, патамушта массив полупустой.

В предыдущем посте решение.
К сообщению приложен файл: 5896020.gif(5Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Вы приложите файл, в котором эти серые появляются
Саш, появляются в первом примере, патамушта массив полупустой.

В предыдущем посте решение.

Автор - KuklP
Дата добавления - 09.10.2017 в 11:20
KuklP Дата: Понедельник, 09.10.2017, 11:47 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
И это мона попроще:
[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
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеИ это мона попроще:
[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
[/vba]

Автор - KuklP
Дата добавления - 09.10.2017 в 11:47
user0 Дата: Понедельник, 09.10.2017, 11:50 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 125
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
nilem
Спасибо, то что нужно!

KuklP
Спасибо и ваш вариант работает, но надо потом еще туда доп проверку втиснуть на пустой массив при вводе отсутствующего значения в поле комбобокса, так что смена фокуса попроще будет :)
появляются в первом примере, патамушта массив полупустой.
а я уже стал грешить на то, что в win10+office2016 эти списки немного по другому отрисовываются, нежели чем в win7-8+2013
 
Ответить
Сообщениеnilem
Спасибо, то что нужно!

KuklP
Спасибо и ваш вариант работает, но надо потом еще туда доп проверку втиснуть на пустой массив при вводе отсутствующего значения в поле комбобокса, так что смена фокуса попроще будет :)
появляются в первом примере, патамушта массив полупустой.
а я уже стал грешить на то, что в win10+office2016 эти списки немного по другому отрисовываются, нежели чем в win7-8+2013

Автор - user0
Дата добавления - 09.10.2017 в 11:50
_Boroda_ Дата: Понедельник, 09.10.2017, 12:20 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11525
Репутация: 4744 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Саш, появляются в первом примере, патамушта массив полупустой

А вот и нет. Если б у меня появлялись, я б не спрашивал. У меня там нормально все отрабатывает
win10+office2013 64 бит
А про полупустой я примерно и хотел как раз сказать на примере =""
Ну ладно, уже неважно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Саш, появляются в первом примере, патамушта массив полупустой

А вот и нет. Если б у меня появлялись, я б не спрашивал. У меня там нормально все отрабатывает
win10+office2013 64 бит
А про полупустой я примерно и хотел как раз сказать на примере =""
Ну ладно, уже неважно

Автор - _Boroda_
Дата добавления - 09.10.2017 в 12:20
KuklP Дата: Понедельник, 09.10.2017, 12:54 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Так Тс надо конфигурацию компа и ПО поменять, чтоб для тебя пример слепить? :D
Я смотрел в вынь7х64, Эксел10х32.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТак Тс надо конфигурацию компа и ПО поменять, чтоб для тебя пример слепить? :D
Я смотрел в вынь7х64, Эксел10х32.

Автор - KuklP
Дата добавления - 09.10.2017 в 12:54
_Boroda_ Дата: Понедельник, 09.10.2017, 13:22 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11525
Репутация: 4744 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[offtop]ТС написал
но иногда остается
, что вовсе не означает, что это "иногда" у него в примере есть - я, конечно, понимаю, что user0 человек адекватный, но сколько уже подобных примеров на форуме было? А про конфигурацию речь вообще с 9 поста пошла.
Так что нечего тут ухмыляться
[/offtop]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[offtop]ТС написал
но иногда остается
, что вовсе не означает, что это "иногда" у него в примере есть - я, конечно, понимаю, что user0 человек адекватный, но сколько уже подобных примеров на форуме было? А про конфигурацию речь вообще с 9 поста пошла.
Так что нечего тут ухмыляться
[/offtop]

Автор - _Boroda_
Дата добавления - 09.10.2017 в 13:22
KuklP Дата: Понедельник, 09.10.2017, 13:26 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Саш, а можешь в первом примере ввести 20 и выложить скрин? Ка в посте №7. Интересно.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеСаш, а можешь в первом примере ввести 20 и выложить скрин? Ка в посте №7. Интересно.

Автор - KuklP
Дата добавления - 09.10.2017 в 13:26
_Boroda_ Дата: Понедельник, 09.10.2017, 13:37 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11525
Репутация: 4744 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Могу


Это скорее всего у меня какой-то глюк. У меня давно уже машина чудит
К сообщению приложен файл: 7518781.gif(5Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМогу


Это скорее всего у меня какой-то глюк. У меня давно уже машина чудит

Автор - _Boroda_
Дата добавления - 09.10.2017 в 13:37
KuklP Дата: Понедельник, 09.10.2017, 13:40 | Сообщение № 15
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Прикольно. Неправильный у тебя Эксель. :)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеПрикольно. Неправильный у тебя Эксель. :)

Автор - KuklP
Дата добавления - 09.10.2017 в 13:40
user0 Дата: Понедельник, 09.10.2017, 14:30 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 125
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
А вот у меня на 20 тож все нормально, но на 11 - нет (как на скриншоте из первого поста) :'(

upd
хотя нет..не нормально, если набираю 20 быстро, то проблем нет, если есть задержка в полсекунды между цифрами то появляется "серая область"
с 11 как ни набирай всегда появляется серое.

это я про оригинальный файл, если что )


Сообщение отредактировал user0 - Понедельник, 09.10.2017, 16:17
 
Ответить
СообщениеА вот у меня на 20 тож все нормально, но на 11 - нет (как на скриншоте из первого поста) :'(

upd
хотя нет..не нормально, если набираю 20 быстро, то проблем нет, если есть задержка в полсекунды между цифрами то появляется "серая область"
с 11 как ни набирай всегда появляется серое.

это я про оригинальный файл, если что )

Автор - user0
Дата добавления - 09.10.2017 в 14:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение размера списка комбобокса (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!