Страницы: 1
RSS
Изменять размер ListBox в зависимости от длины списка, VBA
 
Excel 2016.
У меня файл с кучей листов. Делаю удобный переход между ними (да, я знаю что можно нажать ПКМ в левом нижнем углу самого Excel, где стрелки перехода между листами, но туда надо тянуться мышкой, что не очень удобно на большом мониторе).

Список листов вызывается сочетанием CTRL + ALT + W
Переход на нужный лист — двойной щелчок на нужном листе или кнопкой.

Вопрос. Можно ли сделать, чтобы размер Listbox'a (и размер самой формы) автоматически менялся в зависимости от числа элементов в ней?
Изменено: zamboga - 14.12.2016 00:23:25
 
Может так.
 
Logistic,спасибо, но это примерно тоже самое, что я сам написал, только в вашем варианте чуть больше информации выводится.

Ваш вариант, как и мой, не делает автоматический ресайз окошка с формой в зависимости от числа листов.
 
Код
Private Sub UserForm_Initialize()
Me.ListBox1.Height = 5     ' установка видимости меньше одной строки
' по умолчанию ListBox1.IntegralHeight = True
End Sub

Код
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Podgonka_dobavkoy_po_odnomu
End Sub

Код
Sub Podgonka_dobavkoy_po_odnomu()
Static currentVisibleCount As Byte 'помнит кол-во видимых строк
Dim maxScreenVisibleCount As Byte
maxScreenVisibleCount = 60 'чтоб за экран не вылезало
With Me.ListBox1
    If .Height < 6 Then currentVisibleCount = 0 'начальные условия
    If currentVisibleCount >= maxScreenVisibleCount Then Exit Sub
    If currentVisibleCount < .ListCount _
        Then currentVisibleCount = currentVisibleCount + 1 Else Exit Sub
    .IntegralHeight = False 'отключаем подгонку, чтоб при включении произошло событие
    .Height = .Height + 15 '15 зависит от размера шрифта, но держит широкий диапазон
    .IntegralHeight = True 'включаем, но подгонка произойдет после окончания процедуры
    Me.Height = .Height + 100
    Me.CommandButton1.Top = .Height + 10
    Me.CommandButton2.Top = .Height + 10
End With
End Sub

Вот такой костыль  :D
Можно еще ListBox1_MouseMove использовать, конечно...
Изменено: AAF - 18.12.2016 07:21:08
 
А почему бы не использовать лист ComboBox'а, ведь Ваши требования удовлетворяются его естественным поведением?... ;)
Изменено: AAF - 18.12.2016 07:22:41
Страницы: 1
Наверх