Доброго всем вечера. Просьба сразу не пинать, может ответ и на поверхности, но 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
wild_pig, спасибо огромное, помогло. Возникло несколько вопросов: 1) Далее хочу написать макрос, чтобы эти данные из ComboBoxов записывались на определенный бланк. Вопрос: например в ComboBox1 забивается Фамилия, далее в программе эти данные и остаются в переменной ComboBox1? Т.е. я могу ячейке на каком-либо листе присвоить значение из ComboBox1? 2) В ComboBox можно какой-нибудь командой отсортировать по алфавиту данные? Спасибо.
wild_pig, спасибо огромное, помогло. Возникло несколько вопросов: 1) Далее хочу написать макрос, чтобы эти данные из ComboBoxов записывались на определенный бланк. Вопрос: например в ComboBox1 забивается Фамилия, далее в программе эти данные и остаются в переменной ComboBox1? Т.е. я могу ячейке на каком-либо листе присвоить значение из ComboBox1? 2) В ComboBox можно какой-нибудь командой отсортировать по алфавиту данные? Спасибо.sos-13
Доброго всем вечера. Вроде все получается. Единственное проблема возникла, понимаю что ответ где-то на поверхности, но найти не могу. Суть в следующем, при нажатии на кнопу "создать" необходимо закрыть форму и перейти на "лист2". Подскажите пожалуйста что не так?
Доброго всем вечера. Вроде все получается. Единственное проблема возникла, понимаю что ответ где-то на поверхности, но найти не могу. Суть в следующем, при нажатии на кнопу "создать" необходимо закрыть форму и перейти на "лист2". Подскажите пожалуйста что не так?sos-13
В итоге должно получиться так: при нажатии на кнопку "создать" создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.
В итоге должно получиться так: при нажатии на кнопку "создать" создается бланк отпускного билета, записываются данные в базу данных, и ведется учет отпусков, командировок и т.д.sos-13
Цитата 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, 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
Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Быстрей всего, это я не пойму, почему в данной задаче форма обязательна? Лично я, использование форм избегаю. Для меня, это лишний гемор. В вашей задаче тоже можно обойтись без формы, что (Вам) и облегчило бы ее решение. ИМХО. Но, вольному воля. Каждый сам себе создает проблемы. Извините, что вмешался!
Если честно не пойму, что не так? С формой что-то не то? Или в чем-то другом проблема?
Быстрей всего, это я не пойму, почему в данной задаче форма обязательна? Лично я, использование форм избегаю. Для меня, это лишний гемор. В вашей задаче тоже можно обойтись без формы, что (Вам) и облегчило бы ее решение. ИМХО. Но, вольному воля. Каждый сам себе создает проблемы. Извините, что вмешался!Wasilich
Сообщение отредактировал Wasilic - Четверг, 10.04.2014, 22:00