Прокрутка элемента управления ListBox - PullRequest
1 голос
/ 29 июня 2019

Я провел массу исследований, и, наконец, сдался и надеюсь, что сообщество может помочь. У меня есть окно списка управления формой, а не активный х. Я намеренно использую элемент управления формой по ряду причин, которые не обязательно важны (если только вы не научите меня, как на 100% гарантировать, что элементы управления ActiveX не меняют размер при открытии рабочей книги). Я не могу понять, как заставить окно списка управления формой прокручивать выбранное значение и отображать его. Вот что у меня есть:

ActiveSheet.ListBoxes("List Box 13").Selected = 100

Список содержит 1000 значений для выбора. Когда это выполняется, # 100 выбран, но не отображается. Поле со списком не перемещается.

Как заставить прокрутку работать так, чтобы выбранное значение находилось сверху?

ActiveX будет:

.TopIndex

Но это недоступно для элементов управления формой.

1 Ответ

0 голосов
/ 03 июля 2019

Прокрутите до указанного индекса списка, который будет отображаться в верхней части видимого списка

Я не могу понять, как получить формуокно списка управления для прокрутки к выбранному значению и его отображения.

Кажется, что на самом деле нет стандартного метода (за исключением вызовов API) для управления видимостью внутреннего отображения списка для форма контрольный список в отличие от пользовательской формы ActiveX контрольный список.

Дополнительные подсказки

Ради полноты (и из-за комментариев) я демонстрирую, как прокрутить представление в списке Userform, комбинируя оба свойства навигации - т.е.установка .ListIndex, а также .TopIndex вместе с определенным индексом значение :-), например, с помощью следующей процедуры:

Примеры вызовов

  ScrollTo 100          ' attention: zerobased

или

  ScrollTo ActiveSheet.ListBoxes("List Box 13").Selected 

Вспомогательная процедура

... устанавливает текущий ListIndex, например, 100 , а определяет его как .TopIndex.

( Примечание: конечно, цели в самом конце списка могут отображаться даже ниже .TopIndex в зависимости от фактического .ListCount)

Private Sub ScrollTo(ByVal idx&)
' Purpose: Scroll to given target index to be displayed on top of visible list
' Site:    /8507855/prokrutka-elementa-upravleniya-listbox 
' Author:  https://stackoverflow.com/users/6460297/t-m
    Me.ListBox1.TopIndex = idx
    Me.ListBox1.ListIndex = idx
End Sub

...