Добрый день! Прошу помощи. Создал форму с MultiPage с 8 вкладками. В каждой вкладке ListBox, к которому подключается соответсвующий перечень. Но не очень мне нравится код, посмотрите, пожалуйста, может его как-то можно подсократить?
Nickname_82 написал: может его как-то можно подсократить?
сокращаем мультипейдж
Код
Private Sub Multipage1_Change()
Dim i%, LastRow As Long, n%, nn%
nn = MultiPage1.SelectedItem.Index + 1
n = Choose(nn, 1, 3, 5, 7, 9, 11, 13)
With Sheets("Справочник")
LastRow = .Cells(Rows.Count, n).End(xlUp).Row
For i = 2 To LastRow
If .Cells(i, n) <> "" Then
Controls("ListBox" & nn).AddItem ""
Controls("ListBox" & nn).List(i - 2, 0) = i
Controls("ListBox" & nn).List(i - 2, 1) = .Cells(i, n).Value
End If
Next
End With
End Sub
Я бы заполнение ЛистБоксов перенес в обработчик другого события, т.к. при Вашем подходе этот код выполняетяс при КАЖДОМ выборе КАЖДОЙ вкладки и происходит ДОнаполнение ЛистБоксов. Это видно по ползункам этих ЛистБоксов
Код
Private Sub UserForm_Initialize()
Dim I&, LastRow%, J&, n&
For I = 1 To Me.MultiPage1.Pages.Count
n = Choose(I, 1, 3, 5, 7, 9, 11, 13)
With Sheets("Справочник")
LastRow = .Cells(.Rows.Count, n).End(xlUp).Row
For J = 2 To LastRow
If .Cells(J, n) <> "" Then
Me.Controls("ListBox" & I).AddItem ""
Me.Controls("ListBox" & I).List(J - 2, 0) = I
Me.Controls("ListBox" & I).List(J - 2, 1) = .Cells(J, n).Value
End If
Next
End With
Next
MultiPage1.Value = 0
End Sub