Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/добавление уникальных элементов в несколько ComboBox - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » добавление уникальных элементов в несколько ComboBox (Макросы/Sub)
добавление уникальных элементов в несколько ComboBox
sos-13 Дата: Четверг, 03.04.2014, 22:01 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго всем вечера. Просьба сразу не пинать, может ответ и на поверхности, но VBA просто увлекаюсь, не профессионал, поэтому и прошу помощи.
Суть проблемы в следующем: есть форма с несколькими элементами ComboBox1, ComboBox2 и т.д. Также есть таблица с данными (например столбцы: должность, отдел, фамилия, имя, отчество .... ). Эти данные не отсортированы по алфавиту или по порядку. Необходимо сделать следующее: чтобы в ComboBox отображались уникальные (не повторяющиеся) данные.
Эту проблему решил (нашел в интернете) так:

[vba]
Код
Dim uniqItems As New Collection
'добавляем значения ячеек в коллекцию...
For i = 2 To s2
zna = Cells(i, zz2).Text
If zna <> "" Then
'если такой элемент уже добавлен, генерируется ошибка;
'игнорируя ошибку, элемент не добавится повторно
On Error Resume Next
uniqItems.Add zna, zna
On Error GoTo 0
End If
Next i

'перекидываем уникальные элементы в ComboBox
For Each item In uniqItems
ComboBox1.AddItem item
Next item
[/vba]

А вот с тем чтобы это действовало одновременно на несколько ComboBox, т.е. открылось окно и в разных ComboBox отображаются данные из разных столбцов, разобраться не могу. Помогите.
Заранее спасибо
 
Ответить
СообщениеДоброго всем вечера. Просьба сразу не пинать, может ответ и на поверхности, но VBA просто увлекаюсь, не профессионал, поэтому и прошу помощи.
Суть проблемы в следующем: есть форма с несколькими элементами ComboBox1, ComboBox2 и т.д. Также есть таблица с данными (например столбцы: должность, отдел, фамилия, имя, отчество .... ). Эти данные не отсортированы по алфавиту или по порядку. Необходимо сделать следующее: чтобы в ComboBox отображались уникальные (не повторяющиеся) данные.
Эту проблему решил (нашел в интернете) так:

[vba]
Код
Dim uniqItems As New Collection
'добавляем значения ячеек в коллекцию...
For i = 2 To s2
zna = Cells(i, zz2).Text
If zna <> "" Then
'если такой элемент уже добавлен, генерируется ошибка;
'игнорируя ошибку, элемент не добавится повторно
On Error Resume Next
uniqItems.Add zna, zna
On Error GoTo 0
End If
Next i

'перекидываем уникальные элементы в ComboBox
For Each item In uniqItems
ComboBox1.AddItem item
Next item
[/vba]

А вот с тем чтобы это действовало одновременно на несколько ComboBox, т.е. открылось окно и в разных ComboBox отображаются данные из разных столбцов, разобраться не могу. Помогите.
Заранее спасибо

Автор - sos-13
Дата добавления - 03.04.2014 в 22:01
sos-13 Дата: Четверг, 03.04.2014, 22:45 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Извиняюсь. Рабочий вариант на работе. Накидал пример.
К сообщению приложен файл: 2334626.xlsm (16.4 Kb)
 
Ответить
СообщениеИзвиняюсь. Рабочий вариант на работе. Накидал пример.

Автор - sos-13
Дата добавления - 03.04.2014 в 22:45
RAN Дата: Четверг, 03.04.2014, 22:56 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Накидал пример.

Воистину накидал.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Накидал пример.

Воистину накидал.

Автор - RAN
Дата добавления - 03.04.2014 в 22:56
sos-13 Дата: Четверг, 03.04.2014, 23:12 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А что-то не так? Необходимо чтобы в форме отображались данные из столбцов и все. :)
 
Ответить
СообщениеА что-то не так? Необходимо чтобы в форме отображались данные из столбцов и все. :)

Автор - sos-13
Дата добавления - 03.04.2014 в 23:12
RAN Дата: Четверг, 03.04.2014, 23:32 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
1.
Эту проблему решил (нашел в интернете) так:

2.
Накидал пример.

3. Макросов в примере нет. Иду спать. ;)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 03.04.2014, 23:33
 
Ответить
Сообщение1.
Эту проблему решил (нашел в интернете) так:

2.
Накидал пример.

3. Макросов в примере нет. Иду спать. ;)

Автор - RAN
Дата добавления - 03.04.2014 в 23:32
wild_pig Дата: Пятница, 04.04.2014, 00:27 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
На планете когда-то раздавали
К сообщению приложен файл: __.xls (44.5 Kb)
 
Ответить
СообщениеНа планете когда-то раздавали

Автор - wild_pig
Дата добавления - 04.04.2014 в 00:27
sos-13 Дата: Пятница, 04.04.2014, 21:03 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
wild_pig, спасибо огромное, помогло.
Возникло несколько вопросов:
1) Далее хочу написать макрос, чтобы эти данные из ComboBoxов записывались на определенный бланк. Вопрос: например в ComboBox1 забивается Фамилия, далее в программе эти данные и остаются в переменной ComboBox1? Т.е. я могу ячейке на каком-либо листе присвоить значение из ComboBox1?
2) В ComboBox можно какой-нибудь командой отсортировать по алфавиту данные?
Спасибо.
К сообщению приложен файл: __.xlsm (25.2 Kb)
 
Ответить
Сообщениеwild_pig, спасибо огромное, помогло.
Возникло несколько вопросов:
1) Далее хочу написать макрос, чтобы эти данные из ComboBoxов записывались на определенный бланк. Вопрос: например в ComboBox1 забивается Фамилия, далее в программе эти данные и остаются в переменной ComboBox1? Т.е. я могу ячейке на каком-либо листе присвоить значение из ComboBox1?
2) В ComboBox можно какой-нибудь командой отсортировать по алфавиту данные?
Спасибо.

Автор - sos-13
Дата добавления - 04.04.2014 в 21:03
wild_pig Дата: Суббота, 05.04.2014, 13:09 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
1)[vba]
Код
With Sheets("Лист2")
     .Cells(1, 1) = Combobox1
End With
[/vba]

2) Отсортируйте лист, а потом в комбобокс
 
Ответить
Сообщение1)[vba]
Код
With Sheets("Лист2")
     .Cells(1, 1) = Combobox1
End With
[/vba]

2) Отсортируйте лист, а потом в комбобокс

Автор - wild_pig
Дата добавления - 05.04.2014 в 13:09
sos-13 Дата: Суббота, 05.04.2014, 23:55 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
wild_pig, Спасибо огромное, элементарного я и не увидел.
Спасибо ещё раз.
 
Ответить
Сообщениеwild_pig, Спасибо огромное, элементарного я и не увидел.
Спасибо ещё раз.

Автор - sos-13
Дата добавления - 05.04.2014 в 23:55
sos-13 Дата: Вторник, 08.04.2014, 21:32 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго всем вечера. Вроде все получается. Единственное проблема возникла, понимаю что ответ где-то на поверхности, но найти не могу. Суть в следующем, при нажатии на кнопу "создать" необходимо закрыть форму и перейти на "лист2".
Подскажите пожалуйста что не так?
К сообщению приложен файл: 5215956.xlsm (35.3 Kb)
 
Ответить
СообщениеДоброго всем вечера. Вроде все получается. Единственное проблема возникла, понимаю что ответ где-то на поверхности, но найти не могу. Суть в следующем, при нажатии на кнопу "создать" необходимо закрыть форму и перейти на "лист2".
Подскажите пожалуйста что не так?

Автор - sos-13
Дата добавления - 08.04.2014 в 21:32
sos-13 Дата: Среда, 09.04.2014, 12:49 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Решение нашел, но почему-то работать не хочет. Для кнопки "создать" написал макрос

Private Sub CommandButton1_Click()
UserForm1.show
End Sub

но почему-то не работает, выдает ошибку

Run-time error '438':
Object doesn't support this property or method

Подскажите пожалуйста что не так?
 
Ответить
СообщениеРешение нашел, но почему-то работать не хочет. Для кнопки "создать" написал макрос

Private Sub CommandButton1_Click()
UserForm1.show
End Sub

но почему-то не работает, выдает ошибку

Run-time error '438':
Object doesn't support this property or method

Подскажите пожалуйста что не так?

Автор - sos-13
Дата добавления - 09.04.2014 в 12:49
RAN Дата: Среда, 09.04.2014, 14:00 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Private Sub CommandButton2_Click()
Unload Me
Sheets("Лист2").Activate
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Private Sub CommandButton2_Click()
Unload Me
Sheets("Лист2").Activate
End Sub
[/vba]

Автор - RAN
Дата добавления - 09.04.2014 в 14:00
Wasilich Дата: Среда, 09.04.2014, 19:38 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Почитал тему, посмотрел пример, а понять не могу, зачем все это уродство с формой?
Какой в ней смысл? %)
 
Ответить
СообщениеПочитал тему, посмотрел пример, а понять не могу, зачем все это уродство с формой?
Какой в ней смысл? %)

Автор - Wasilich
Дата добавления - 09.04.2014 в 19:38
sos-13 Дата: Среда, 09.04.2014, 20:55 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В итоге должно получиться так: при нажатии на кнопку "создать" создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
 
Ответить
СообщениеВ итоге должно получиться так: при нажатии на кнопку "создать" создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.

Автор - sos-13
Дата добавления - 09.04.2014 в 20:55
Wasilich Дата: Четверг, 10.04.2014, 18:13 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
Вот я и спросил:
зачем все это уродство с формой?
 
Ответить
Сообщение
создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
Вот я и спросил:
зачем все это уродство с формой?

Автор - Wasilich
Дата добавления - 10.04.2014 в 18:13
sos-13 Дата: Четверг, 10.04.2014, 20:55 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата sos-13, 09.04.2014 в 20:55, в сообщении № 14
создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
Вот я и спросил:
Цитата Wasilic, 09.04.2014 в 19:38, в сообщении № 13
зачем все это уродство с формой?

Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Лучше помогите решить несколько проблем:
1) Не могу разобраться со следующим. При запуске формы использую следующий код:
[vba]
Код
Sub Запуск()
On Error Resume Next
   For Each cell In Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row
    nodupes.Add cell.Value, CStr(cell.Value)
   Next cell
  On Error GoTo 0
'Добавление уникального элемента в открывающийся список ComboBox1
   For Each Item In nodupes
    UserForm1.ComboBox1.AddItem Item
   Next Item
On Error Resume Next
   For Each cell In Sheets("Данные").Cells(Rows.Count, "g").End(xlUp).Row
    nodupes1.Add cell.Value, CStr(cell.Value)
   Next cell
  On Error GoTo 0
'Добавление уникального элемента в открывающийся список ComboBox15
   For Each Item In nodupes1
    UserForm1.ComboBox15.AddItem Item
   Next Item
UserForm1.Show
End Sub
[/vba]
Если строчку: [vba]
Код
For Each cell In Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row
[/vba] заменить на [vba]
Код
For Each cell In Sheets("Данные").Range("фамилия")
[/vba] то при запуске формы в выпадающем списке появляются фамилии как надо, если оставить первоначальный вариант, то не получается. Что не так? Хочется сделать более универсально, не привязываясь к именованному диапозону.
2) Второй вопрос: если фамилии в списке нет, для добавления к общему списку использую следующее:
[vba]
Код
'Добавление нового элемента в конец списка
  'Необходимо добавить новый элемент, если в списке он не встречается
  If UserForm1.ComboBox1.Value <> "" Then
    i = Sheets("Данные").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(i, 1) = UserForm1.ComboBox1.Text
  End If
[/vba]
Фамилия добавляется в конец списка. Но вопрос в следующем, как сделать так, чтобы фамилия добавлялась только если ее нет в общем списке, а не всегда.
Если не сложно помогите пожалуйста. И просьба не пинайте сильно, хочется разобраться и научиться. Спасибо
К сообщению приложен файл: ___1.xlsm (76.4 Kb)
 
Ответить
Сообщение
Цитата sos-13, 09.04.2014 в 20:55, в сообщении № 14
создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
Вот я и спросил:
Цитата Wasilic, 09.04.2014 в 19:38, в сообщении № 13
зачем все это уродство с формой?

Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Лучше помогите решить несколько проблем:
1) Не могу разобраться со следующим. При запуске формы использую следующий код:
[vba]
Код
Sub Запуск()
On Error Resume Next
   For Each cell In Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row
    nodupes.Add cell.Value, CStr(cell.Value)
   Next cell
  On Error GoTo 0
'Добавление уникального элемента в открывающийся список ComboBox1
   For Each Item In nodupes
    UserForm1.ComboBox1.AddItem Item
   Next Item
On Error Resume Next
   For Each cell In Sheets("Данные").Cells(Rows.Count, "g").End(xlUp).Row
    nodupes1.Add cell.Value, CStr(cell.Value)
   Next cell
  On Error GoTo 0
'Добавление уникального элемента в открывающийся список ComboBox15
   For Each Item In nodupes1
    UserForm1.ComboBox15.AddItem Item
   Next Item
UserForm1.Show
End Sub
[/vba]
Если строчку: [vba]
Код
For Each cell In Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row
[/vba] заменить на [vba]
Код
For Each cell In Sheets("Данные").Range("фамилия")
[/vba] то при запуске формы в выпадающем списке появляются фамилии как надо, если оставить первоначальный вариант, то не получается. Что не так? Хочется сделать более универсально, не привязываясь к именованному диапозону.
2) Второй вопрос: если фамилии в списке нет, для добавления к общему списку использую следующее:
[vba]
Код
'Добавление нового элемента в конец списка
  'Необходимо добавить новый элемент, если в списке он не встречается
  If UserForm1.ComboBox1.Value <> "" Then
    i = Sheets("Данные").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(i, 1) = UserForm1.ComboBox1.Text
  End If
[/vba]
Фамилия добавляется в конец списка. Но вопрос в следующем, как сделать так, чтобы фамилия добавлялась только если ее нет в общем списке, а не всегда.
Если не сложно помогите пожалуйста. И просьба не пинайте сильно, хочется разобраться и научиться. Спасибо

Автор - sos-13
Дата добавления - 10.04.2014 в 20:55
wild_pig Дата: Четверг, 10.04.2014, 21:38 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row

Это не диапазон а номер строки (одна цифра)

Пардон, не так понял вопрос. Пройтись по массиву и сравнить со значением в комбобоксе, если нет совпадений то добавить.


Сообщение отредактировал wild_pig - Четверг, 10.04.2014, 21:56
 
Ответить
Сообщение
Sheets("Данные").Cells(Rows.Count, "A").End(xlUp).Row

Это не диапазон а номер строки (одна цифра)

Пардон, не так понял вопрос. Пройтись по массиву и сравнить со значением в комбобоксе, если нет совпадений то добавить.

Автор - wild_pig
Дата добавления - 10.04.2014 в 21:38
sos-13 Дата: Четверг, 10.04.2014, 21:43 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
wild_pig, А в моем примере не могли бы исправить и прикрепить файл?
 
Ответить
Сообщениеwild_pig, А в моем примере не могли бы исправить и прикрепить файл?

Автор - sos-13
Дата добавления - 10.04.2014 в 21:43
Wasilich Дата: Четверг, 10.04.2014, 21:57 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Быстрей всего, это я не пойму, почему в данной задаче форма обязательна? Лично я, использование форм избегаю. Для меня, это лишний гемор. В вашей задаче тоже можно обойтись без формы, что (Вам) и облегчило бы ее решение. ИМХО.
Но, вольному воля. Каждый сам себе создает проблемы.
Извините, что вмешался!


Сообщение отредактировал Wasilic - Четверг, 10.04.2014, 22:00
 
Ответить
Сообщение
Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Быстрей всего, это я не пойму, почему в данной задаче форма обязательна? Лично я, использование форм избегаю. Для меня, это лишний гемор. В вашей задаче тоже можно обойтись без формы, что (Вам) и облегчило бы ее решение. ИМХО.
Но, вольному воля. Каждый сам себе создает проблемы.
Извините, что вмешался!

Автор - Wasilich
Дата добавления - 10.04.2014 в 21:57
sos-13 Дата: Четверг, 10.04.2014, 22:00 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Каждый сам себе создает проблемы.
Если честно, я именно и хочу решить для себя эту проблему. Но за критику спасибо.
Может поможете с решением?
 
Ответить
Сообщение
Каждый сам себе создает проблемы.
Если честно, я именно и хочу решить для себя эту проблему. Но за критику спасибо.
Может поможете с решением?

Автор - sos-13
Дата добавления - 10.04.2014 в 22:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » добавление уникальных элементов в несколько ComboBox (Макросы/Sub)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!