Страницы: 1
RSS
ComboBox с добавлением новых элементов в Userform
 
Доброго и с Наступающим.
Помогите реализовать.
В UserForm есть ComboBox добавил в него значения с помощью такой формулы
Код
Private Sub UserForm_Initialize()
    ComboBox1.List = Array("Capella", "DIY Flavor Shack", "Flavor West", "Flavorah", "Inawera")
End Sub
Как в таком случае добавить новые элементы в Userform и удалить старые, а так же добавить предупреждение что в списке такой элемент уже присутствует? Мне нужно что бы не было связи ни с диапазоном ни с ячейками.

Заранее спасибо.
 
Цитата
Шит написал: Мне нужно что бы не было связи ни с диапазоном ни с ячейками
Перенаполняйте Ваш Array нужными на данный момент данными и 'скармливайте' его КомбоБоксу
Согласие есть продукт при полном непротивлении сторон
 
Шит, речь о заполнении Комбобокса уникальными значениями?
 
Цитата
Sanja написал:
Перенаполняйте Ваш Array нужными на данный момент данными и 'скармливайте' его КомбоБоксу
Хочется это делать через кнопочку на UserForm)))
 
Шит, Проанализируйте свой ник. Не, ну конечно есть те, кому нравится, но ….
По вопросам из тем форума, личку не читаю.
 
Цитата
Anchoret написал:
речь о заполнении Комбобокса уникальными значениями?
Да. В ComboBoxe названия Брендов.... в случае если появляется новый бренд, его нужно добавить в список, а на случай если ошибся реализовать удаление.
 
Цитата
Шит написал: Хочется это делать через кнопочку на UserForm)))
никто ж не против - делайте)
 
Dima S, Спасибо)) Как узнаю как сделаю)

Цитата
БМВ написал: Проанализируйте свой ник.
Значение Шит
 
Шит, за почти сотню сообщений на форуме вы еще так и не поняли, почему ваша тема превратилась в флуд без результата?
 
Цитата
Шит написал:
Мне нужно что бы не было связи ни с диапазоном ни с ячейками
А с чем должен быть связан массив?
 
На другом форуме мне предложили вот такой вариант
Код
Dim t$, i As Variant 
t = "Premix Drops"
i = Application.Match(t, ComboBox1.List, 0)
 
If Not IsError(i) Then
   MsgBox t & " уже есть с списке и мы его уничтожим ", vbCritical, ""
   ComboBox1.RemoveItem i - 1
Else
   ComboBox1.AddItem t
End If
Единственный недостаток это то что после того как закрываешь UserForm все возвращается в исходное состояние.
Как доработать?  
Изменено: Шит - 29.12.2018 21:58:40
 
Цитата
Шит написал:
На другом форуме мне предложили вот такой вариант
А что, разве есть еще форумы кроме этого?  ;)
По вопросам из тем форума, личку не читаю.
 
Шит, а каким способом Вы добавляете новые значения в ComboBox?
 
Кто нибудь уже про файл-пример ему (ТС) скажет!? ;)  :D  
Согласие есть продукт при полном непротивлении сторон
 
Добавляю пример
 
Как то давно на Word находил такую формулу. Для того что бы ComboBox запоминал последнее значение которые выбирал пользователь.
Код
Private Sub UserForm_Initialize()
  ComboBox1.AddItem "Иванов"
  ComboBox1.AddItem "Петров"
  ComboBox1.AddItem "Сидоров"
  
  Dim i As Integer
  On Error Resume Next
  i = CInt(ThisDocument.Variables("Combobox1LastChoice").Value)
  If Err.Number <> 0 Then Err.Clear
  ComboBox1.ListIndex = i
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Dim var As Variable
 
  For Each var In ThisDocument.Variables
    If var.Name = "Combobox1LastChoice" Then
      Exit For
    End If
  Next
  If var Is Nothing Then
    ThisDocument.Variables.Add "Combobox1LastChoice", ComboBox1.ListIndex
  Else
    var.Value = ComboBox1.ListIndex
  End If
End Sub

Возможно что то подобное можно придумать для Excel ну естественно что бы Лист запоминался.
 
кросс http://www.cyberforum.ru/vba/thread2382290.html
 
Вторая форма не нужна, вводите новые значения в поле ввода ComboBox и нажимайте на '+' в основной форме.
В модуль формы
Скрытый текст
Изменено: Sanja - 30.12.2018 10:16:47
Согласие есть продукт при полном непротивлении сторон
 
Sanja, насколько я понял, такой вариант автора не устроит: добавленное значение не сохраняется в массиве.
 
Цитата
Юрий М написал: добавленное значение не сохраняется в массиве
Сохраняется до момента выгрузки формы из памяти. А так, да,
Цитата
Шит написал: Мне нужно что бы не было связи ни с диапазоном ни с ячейками
без сохранения на лист не обойтись. Хотя...Сейчас попробую извратиться
Согласие есть продукт при полном непротивлении сторон
 
Может в скрытые имена? Автор ничего про них не говорил - только про диапазоны упомянул ))
 
А возможно программно изменить код? на подобие как тут.
Просто что бы при нажатие "+" в UserForm_Initialize() Добавлялось строка ComboBox1.AddItem "новый текст"
 
Шит, а почему Вы не хотите хранить массив на листе? Неужели это так принципиально? Ведь этот лист можно скрыть.
 
Юрий М, Я не хочу захламлять листами свой проект. Плюс ко всему такого способа в гугле не нашел и стало интересно возможно ли это))) Видимо Вариантов не много либо масив либо реестр... но в реестре хранить не удобно но это было интересно)
 
Цитата
Шит написал:
Я не хочу захламлять листами свой проект
В таком случае выделите на существующем листе один столбец для этого массива. Неужели не хватит столбцов? ))
 
Юрий М, Буду довольствоваться этим))) Однажды наберусь достаточно знаний и опыты и смогу программно менять значения в ComboBox)))
 
Цитата
Юрий М написал: Может в скрытые имена?
А зачем в скрытые? Можно и в обычные (см. Диспетчер Имен)
Согласие есть продукт при полном непротивлении сторон
 
Гениально))) А по поводу удаления... как удалить из списка не нужную запись?
Изменено: Шит - 30.12.2018 15:29:00
 
Вопрос не по теме
.RemoveItem - ищите.
 
Цитата
vikttur написал: Вопрос не по теме
Согласен, но так, для полноты освещения вопроса :)  
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх