Неоднократно обновлять содержимое списка, сохраняя при этом пользовательский контроль

В VBA я неоднократно обновляю содержимое списка текстом постоянно растущего текстового файла. Есть ли способ позволить пользователю сохранить контроль (прокрутить список, нажать кнопку), пока выполняется цикл, в котором я нахожусь для обновления списка? Также подойдет альтернатива application.wait; например, обновить -> подождать x секунд (где пользователь все еще может что-то делать -> обновить снова -> повторить.


person Quintis555    schedule 10.01.2012    source источник


Ответы (1)


Вот начало. В обычный модуль вставьте этот код:

Sub ShowUserForm()
UserForm1.Show vbModeless
End Sub

Sub UpdateTextBox()
Dim ws As Excel.Worksheet

Set ws = ThisWorkbook.Worksheets(1)
With UserForm1.ListBox1
    .List = ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).Value2
    .ListIndex = .ListCount - 1
End With
Application.OnTime Now + TimeValue("00:00:5"), "UpdateTextBox"
End Sub

Вставьте этот код в свою пользовательскую форму в событие UserForm_Activate:

UpdateTextBox

Он обновляет значения из столбца A листа Sheet1 в книге с кодом.

Чтобы проверить это, запустите ShowUserForm.

person Doug Glancy    schedule 10.01.2012
comment
Это на самом деле отлично работает! Есть ли способ заставить его автоматически прокручиваться до нижней части всего, что было добавлено, или автоматически выбирать нижнюю строку? Всякий раз, когда он обновляется, он переходит к любой выбранной строке и устанавливает ее как нижний текст (или как можно ближе к нижней части, насколько это возможно), а выбор по умолчанию — это верхняя строка, поэтому каждый раз, когда он обновляется, он возвращается назад. до самого верха. - person Quintis555; 11.01.2012
comment
Я добавил в код строку, которая выбирает последнюю строку в списке. - person Doug Glancy; 12.01.2012