Здравствуйте! Не подскажите, как можно ускорить загрузку UserForm? Список для ComboBox, вроде, небольшой, но уходят ценные секунды, а если действия последовательно выполняются с несколькими формами, то минуты.
Set oColumn = Workbooks("Книга2.xlsm").Sheets("Лист1").Columns("C")
For Each oCell In oColumn.Cells
1. Просмотр ВСЕХ ячеек столбца. Зачем? Это же время...
2. Обращение к ячейкам листа - медленная операция. Записать в массив, обработать.
Private Sub UserForm_Initialize()
Dim ArrData()
Dim lRws As Long, i As Long
'Заполняем первый список
With Worksheets("Лист1")
lRws = .Cells(.Rows.Count, "C").End(xlUp).Row ' последняя строка с данными
If lRws < 2 Then Exit Sub
ArrData = .Range("C1:C" & lRws).Value ' данные в массив
End With
For i = 1 To lRws ' цикл по данным
If ArrData(i, 1) <> "" Then
ComboBox1.AddItem ArrData(i, 1) ' новая запись в список
End If
Next i
With ComboBox1
.FontSize = 14: .ListIndex = 0
End With
End Sub
Спасибо, действительно загружается быстрее.
If ArrData(i, 1) <> "" Then
Еслипроверка была введена только для отсечения пустых строк ниже диапазона и в самих данных нет пустот, то еще проще и быстрее:
Private Sub UserForm_Initialize()
Dim lRws As Long
'Заполняем первый список
With Worksheets("Лист1")
lRws = .Cells(.Rows.Count, "C").End(xlUp).Row ' последняя строка с данными
If lRws < 1 Then Exit Sub
ComboBox1.List = .Range("C1:C" & lRws).Value ' данные в список
End With
With ComboBox1
.FontSize = 14: .ListIndex = 0
End With
End Sub
Спасибо! Чем быстрее, тем лучше. Подскажите, а за что отвечает параметр ListIndex = 0?
ListIndex - это номер выделенной строки в ComboBox. Нумерация строк начинается с нуля.