Страницы: 1
RSS
Заполнить ComboBox именами листов за исключением одного имени
 
Пытаюсь заполнить массив именами Листов, не равных Лист1
Все работает, но когда содержимое массива показывается в combobox, то в списке есть пустая строка.
Полагаю, что если бы условий было больше, то и пустых строк тоже было бы больше.
Что и где тут можно подкрутить?
Код
Private Sub ComboBox1_DropButtonClick()
Dim wb As Workbook, s, i
Dim arr()

Set wb = Workbooks(ThisWorkbook.Name)
s = wb.Worksheets.Count

ReDim arr(1 To s)
For i = 1 To s
If wb.Worksheets(i).Name <> "Лист1" Then
arr(i) = wb.Worksheets(i).Name
End If
Next i

ComboBox1.List = arr

End Sub

Спасибо
 
Макрос
 
Заполнение списка прицепите на открытие формы:
Код
Private Sub UserForm_Initialize()
Dim sht As Worksheet
    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> "Лист1" Then ComboBox1.AddItem sht.Name
    Next sht
End Sub

В этом случае Private Sub ComboBox1_DropButtonClick() не нужен. Возможно, и обработка CheckBox1_Click лишняя (как и сам CheckBox1)
 
vikttur, На практике Ваш код не пробовал, поскольку на форме находится несколько кнопок, с помощью которых происходит изменение количества листов (добавление, удаление, переименование). По этому для ComboBox источник должен формироваться не при инициализации формы, а при обращении к ComboBox. Соответственно CheckBox1_Click нужен для активизации (Enabled = true) "нужного" ComboBox,
Но все равно спасибо.
Karataev,  Ваш код вчера не получилось попробовать (реальный файл на работе) , поэтому в понедельник отпишусь...
 
Цитата
для ComboBox источник должен формироваться... при обращении к ComboBox. Соответственно CheckBox1_Click нужен
Никто Вам не мешает применить показанный цикл в коде CheckBox1_Click
 
Согласен с Виктором.
 
vikttur, Юрий М, Можно образец?
 
govorun,
понимаете как в фильмах "можете хранить молчание ибо каждое произнесенное Вами слово может быть использовано против Вас"
в программировании аналогично, каждая написанная Вами конструкция может быть использована против Вас:
это фрагмент
Код
ReDim arr(1 To s)
For i = 1 To s
  If wb.Worksheets(i).Name <> "Лист1" Then arr(i) = wb.Worksheets(i).Name
Next i
на русский переводится так:
элементам массива arr(i) присвоить имена соответствующих листов
если имя листа  = "Лист1" arr(i) - пропустить
Вы коде пишете оставить 1 элемент пустым, а потом спрашиваете откуда в массиве пустая строка?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
а потом спрашиваете откуда в массиве пустая строка?
Дружище, я такого не спрашивал. Не надо на меня поклеп наводить. Мне хватило, что вчера меня здесь вдоль и поперек.... Так вчера хоть за дело. Почитайте внимательно первый пост. Я видел откуда растут ноги у пустой строки, и спросил: Что и где тут можно подкрутить?.
Цитата
Ігор Гончаренко написал:
на русский переводится так:элементам массива arr(i) присвоить имена соответствующих листовесли имя листа  = "Лист1" arr(i) - пропустить
А вот это будем считать Вашей помощью. Не пропадать же посту...
Спасибо.
 
vikttur, Юрий М, Применил...Вставил очистку ComboBox иначе беда... Пожалуй воспользуюсь этим способом вместо цикла. Спасибо.
Код
Dim sht As Worksheet
ComboBox2.Clear
    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> "Лист1" Then ComboBox2.AddItem sht.Name
    Next sht
Изменено: govorun - 08.04.2018 19:50:38
 
если сразу тему назвать:
"Как Комбобокс заполнить именами листов книги за исключением одного определенного имени"
этот вопрос понятен каждому и не него легко получить ответ вторым сообщенем в теме
мало того, такой вопрос будет понятен сотням тех. кто его прочитает потом, понятно что за задача решается в этой теме
Изменено: Ігор Гончаренко - 08.04.2018 23:03:58
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх