В VBA я неоднократно обновляю содержимое списка текстом постоянно растущего текстового файла. Есть ли способ позволить пользователю сохранить контроль (прокрутить список, нажать кнопку), пока выполняется цикл, в котором я нахожусь для обновления списка? Также подойдет альтернатива application.wait; например, обновить -> подождать x секунд (где пользователь все еще может что-то делать -> обновить снова -> повторить.
Неоднократно обновлять содержимое списка, сохраняя при этом пользовательский контроль
Ответы (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
Это на самом деле отлично работает! Есть ли способ заставить его автоматически прокручиваться до нижней части всего, что было добавлено, или автоматически выбирать нижнюю строку? Всякий раз, когда он обновляется, он переходит к любой выбранной строке и устанавливает ее как нижний текст (или как можно ближе к нижней части, насколько это возможно), а выбор по умолчанию — это верхняя строка, поэтому каждый раз, когда он обновляется, он возвращается назад. до самого верха.
- person Quintis555; 11.01.2012
Я добавил в код строку, которая выбирает последнюю строку в списке.
- person Doug Glancy; 12.01.2012