Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
Буду мудрее сегодня
1 / 2 / 0
Регистрация: 16.11.2017
Сообщений: 43
1
Excel

ComboBox с добавлением новых элементов в Userform

29.12.2018, 20:15. Показов 6098. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго и с Наступающим.
Помогите реализовать.
В UserForm есть ComboBox добавил в него значения с помощью такой формулы

Visual Basic
1
2
3
Private Sub UserForm_Initialize()
    ComboBox1.List = Array("Capella", "DIY Flavor Shack", "Flavor West", "Flavorah", "Inawera")
End Sub
Как в таком случае добавить новые элементы в Userform и удалить старые, а так же добавить предупреждение что в списке такой элемент уже присутствует? Мне нужно что бы не было связи ни с диапазоном ни с ячейками.

Заранее спасибо.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2018, 20:15
Ответы с готовыми решениями:

Выпадающий список с добавлением новых элементов
Выпадающий список с добавлением новых элементов.. Пример взят отсюда.....

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

Перенос данных строки в колонки с добавлением новых строк
Здравствуйте! Необходимо перенести данные в ячейках (строка) в такие же данные, но только в...

Как создать слайдер с возможным динамическим добавлением новых слайдов
Не получается создать слайдер с возможным динамическим добавлением новых слайдов. В интернете...

9
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
29.12.2018, 20:37 2
Если изначально заполнить поле со списком именно с помощью свойства .List, то можно так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
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
0
Буду мудрее сегодня
1 / 2 / 0
Регистрация: 16.11.2017
Сообщений: 43
29.12.2018, 21:54  [ТС] 3
Спасибо. То что нужно)) Единственное, что... после закрытия проекта добавленные элементы пропадают(((
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
29.12.2018, 22:05 4
Если хотите сохранить данные, то
либо используйте ячейки (хотя это и противоречит Вашим принципам)
либо сохраняйте данные, например, в текстовый файл/реестр
либо используйте "родной" элемент управления, тот, что на панели инструментов Формы. Правда в этом случае, вместо UserForm придётся мучить DialogSheet, а также лишиться многих фишек ActiveX эу, ибо родные эу менее продвинутые.
0
Буду мудрее сегодня
1 / 2 / 0
Регистрация: 16.11.2017
Сообщений: 43
29.12.2018, 23:25  [ТС] 5
Как до давно на Word находил такую формулу

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
Это для того что бы ComboBox запоминал последнее что в нем выбрано было.
Возможно что то подобное можно придумать для Excel ну естественно что бы Лист запоминался.
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
29.12.2018, 23:45 6
В Excel нет .Variables, но есть ячейки, а также свойства (см. справку, касательно CustomDocumentProperties, CustomProperties), которые позволяют хранить строки. А если речь не идёт о миграции книги другим пользователям, то текстовый файл или реестр, например

Visual Basic
1
2
3
4
5
Application.AddCustomList ComboBox1.List 'запись
 
Application.DeleteCustomList 5 "удаление списка
 
ComboBox1.List = Application.GetCustomListContents(5) 'чтение
0
Буду мудрее сегодня
1 / 2 / 0
Регистрация: 16.11.2017
Сообщений: 43
30.12.2018, 00:04  [ТС] 7
Огромное спасибо за уделенное время)
Последний вопрос. А разве нельзя сделать так что бы в UserForm_Initialize
Добавлялось строка ComboBox1.AddItem "значение из TextBox1"???
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.12.2018, 00:13 8
Можно, но это не имеет никакого смысла, т.к. текстовое поле тоже не будет сохранять данные предыдущей работы. Кроме того, мой самый первый ответ был ориентирован именно на заполнение с помощью свойства .List но никак не метода .AddItem
0
Буду мудрее сегодня
1 / 2 / 0
Регистрация: 16.11.2017
Сообщений: 43
30.12.2018, 00:22  [ТС] 9
Я понимаю что TextBox не сохранит значение.
Я имел в виду что на UserForm в TextBox я пишу "Вася" и при нажатии на кнопку добавить в UserForm_Initialize появляется строка ComboBox1.AddItem "Вася"
Такое возможно?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.12.2018, 00:58 10
Лучший ответ Сообщение было отмечено Otradnoe_4D как решение

Решение

При нажатии на кнопку возникает другое событие, а именно Click и это событие кнопки, но никак не формы.

Вариант без кнопки, где для ввода нового значения, достаточно ввести его в поле ComboBox1 и нажать ENTER

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub UserForm_Initialize()
    If Application.CustomListCount = 4 Then
       ComboBox1.List = Array("Capella", "DIY Flavor Shack", "Flavor West", "Flavorah", "Inawera")
    Else
       ComboBox1.List = Application.GetCustomListContents(5)
    End If
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.AddCustomList ComboBox1.List
End Sub
 
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
       Dim t$: t = Trim$(ComboBox1.Text)
       If Not ComboBox1.MatchFound Then
          ComboBox1.AddItem t
       Else
          MsgBox t & " есть в списке", vbCritical, ""
       End If
    End If
End Sub

С учётом удаления выделенного элемента управления с помощью клавиши DELETE и необходимостью не плодить лишних списков, правильно будет так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub UserForm_Initialize()
    If Application.CustomListCount = 4 Then
       ComboBox1.List = Array("Capella", "DIY Flavor Shack", "Flavor West", "Flavorah", "Inawera")
    Else
       ComboBox1.List = Application.GetCustomListContents(5)
    End If
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Do Until Application.CustomListCount = 4
       Application.DeleteCustomList 5
    Loop
    Application.AddCustomList ComboBox1.List
End Sub
 
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     Dim t$, i&
     Select Case KeyCode
        Case vbKeyReturn
             t = Trim$(ComboBox1.Text)
             If Not ComboBox1.MatchFound Then
                ComboBox1.AddItem t
             Else
                MsgBox t & " есть в списке", vbCritical, ""
             End If
        Case vbKeyDelete
             i = ComboBox1.ListIndex
             If i > -1 Then ComboBox1.RemoveItem i
    End Select
End Sub
1
30.12.2018, 00:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2018, 00:58
Помогаю со студенческими работами здесь

Создать класс наследователь(для ребенка) с добавлением новых характеристик
Помогите пожалуйста:-|#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class...

Userform с Combobox
Всем привет.Надо выполнить такую задачу,не понимаю даже как должна работать.Дело доходит только до...

Тип данных в Combobox UserForm
Здравствуйте! На листе Excel у меня есть таблица из 2-х столбцов (tabl1). В 1-ом столбце...

Заполнение ComboBox при инициализации UserForm
Подскажите, что я не так делаю. Есть главная форма, на которой есть кнопка. При клике на нее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru