Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Работа со списками через форму с MultiPage
 
Добрый день!
Прошу помощи. Создал форму с MultiPage с 8 вкладками. В каждой вкладке ListBox, к которому подключается соответсвующий перечень. Но не очень мне нравится код, посмотрите, пожалуйста, может его как-то можно подсократить?
Изменено: Nickname_82 - 22 Фев 2017 10:15:49
 
Из Правил форума
Цитата
2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов.
Какой из Ваших Вы предложите в качестве темы топика?
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
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
 
Цитата
Sanja написал:
Какой из Ваших Вы предложите в качестве темы топика?
Прошу прощения. Тогда пока по первому вопросу
 
Цитата
V написал: сокращаем мультипейдж
Я бы заполнение ЛистБоксов перенес в обработчик другого события, т.к. при Вашем подходе этот код выполняетяс при КАЖДОМ выборе КАЖДОЙ вкладки и происходит ДОнаполнение ЛистБоксов. Это видно по ползункам этих ЛистБоксов
Код
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
Изменено: Sanja - 22 Фев 2017 13:41:51
Согласие есть продукт при полном непротивлении сторон.
 
V и Sanja спасибо большое за помощь. Всё работает !!!
Страницы: 1
Читают тему (гостей: 1)
Наверх