Заполнение вопросов ComboBox – дублирование значений при каждом выборе поля, а именованный диапазон не заполняется

Я новичок в VBA и StackOverflow, поэтому заранее извиняюсь за любые ошибки.

У меня есть UserForm, который, в конечном счете, будет иметь 16 ComboBoxes. Все 16 из этих ComboBoxes будут иметь те же 5 вариантов ответа на опрос).

Моя первая попытка состояла в том, чтобы заполнить их, как это, повторяется 16 раз для каждого ComboBox:

Private Sub cboAE1A_DropButtonClick() 'Populate control. Me.cboAE1A.AddItem "Strongly disagree" Me.cboAE1A.AddItem "Disagree" Me.cboAE1A.AddItem "Neither agree nor disagree" Me.cboAE1A.AddItem "Agree" Me.cboAE1A.AddItem "Strongly agree" End Sub 

Однако, когда я тестирую форму, выбор ComboBox более одного раза дублирует параметры ответа. Итак, если я нажму на него один раз, все будет в порядке. Во второй раз я вижу 3 набора параметров ответа, так далее и т. Д. Почему это? Что я могу сделать, чтобы предотвратить это?

Во-вторых, в попытке избежать повторения вышеуказанного кода 16 раз, я нашел эту ссылку и попытался адаптировать ее для моих целей:

 Private Sub ufrmGenderTraining_Initialize() 'Populate AE1A combo box. Dim rngRespuestas As Range Dim ws As Worksheet Set ws = Sheets("INPUTS") For Each rngRespuestas In ws.Range("Respuestas") Me.cboAE1A.AddItem rngRespuestas.Value Next rngRespuestas End Sub 

Но ComboBox пуст. Любые идеи, как это исправить, и как эффективно заполнять эти 16 ComboBoxes с тем же списком? Если вы также можете объяснить, как мне 5 лет, это было бы очень признательно!

Заранее спасибо.

Первоначально вы использовали событие DropButtonClick .

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

Следовательно, при первом нажатии на раскрывающееся меню отображается один раз, второй раз два раза и т. Д.

Вы также можете писать меньше кода, перебирая каждый Combobox и применяя одинаковые параметры к каждому из них. Пример:

 Dim comboItems() As Variant Dim ct As Control Dim i As Long comboItems() = Array("Strongly disagree", _ "Disagree", _ "Neither agree nor disagree", _ "Agree", _ "Strongly agree") For Each ct In Me.Controls If TypeName(ct) = "ComboBox" Then For i = LBound(comboItems) To UBound(comboItems) ct.AddItem comboItems(i) Next i End If Next ct 

Убедитесь, что вышеуказанный код используется в событии UserForm_Initialize в UserForm.

Утверждение If :

 If TypeName(ct) = "ComboBox" And _ ct.Name <> "cboGender" And _ ct.Name <> "cboDepartment" Then 

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

Позже пользователь понял, что хочет изменить свой ответ на первый вопрос. Она снова нажимает кнопку выпадающего списка для первого ComboBox; ваш код затем выполняется снова, добавив еще 5 параметров, каждый из которых дублирует.

Я вижу, что вы исправили код события Initialize, чтобы сделать то, что вы намеревались; Я считаю, что это лучший вариант, чем ваш первый. Если, однако, вы предпочтете изменить исходный код, добавьте строку, которая сначала проверит свойство ListCount для ComboBox. Это предотвратит добавление параметров, если ComboBox уже заполнен ответами.

 Private Sub cboAE1A_DropButtonClick() 'Check for existence of items If Me.cbo.AE1A.ListCount = 0 Then 'Populate control. Me.cboAE1A.AddItem "Strongly disagree" Me.cboAE1A.AddItem "Disagree" Me.cboAE1A.AddItem "Neither agree nor disagree" Me.cboAE1A.AddItem "Agree" Me.cboAE1A.AddItem "Strongly agree" End If End Sub 
  • Ссылка на самый недавно добавленный рабочий лист
  • Userform.Show на кнопке формы не распознает пользовательскую форму, получив ошибку 424
  • Установите фокус обратно в окно приложения после показа пользовательской формы
  • Как обнаружить mouse_down на кадре Userform, пока мышь все еще нажата
  • Сохранение рабочих листов с формами в формате pdf
  • не удалось заполнить combobox, используя .rowsource {vba excel}
  • Загрузка различных пользовательских форм последовательно
  • Как добавить значения в таблицу Excel, нажав кнопку?
  • Выровнять Userform с ячейками в Excel
  • VBA - копировать текст из Combobox в User и вставлять в цикл на листе excel
  • Вызов массива по пользовательской форме Завершение / закрытие VBA
  • Interesting Posts

    Условное форматирование – выделение – это раскрашивание ячеек без дискретного соответствия

    Pivottable – «вычислять вычисляемые члены с сервера olap в фильтрах» продолжает выключение

    Как группировать строки excel на нескольких уровнях с помощью макроса excel

    Откройте файл Excel и вызовите макрос из PowerBuilder

    Импорт рабочих листов в одну книгу Excel

    Формулы для списка SharePoint не работают

    Действительные символы для имен листов Excel

    Сделать пользовательскую форму поверх всех приложений при запуске макроса

    Генерация отчетов с несколькими фильтрами только для одного фильтра

    Исключение, когда я пытаюсь открыть файл Excel

    Как добавить несколько строк , определенных в эталонной ячейке

    Начало работы с написанием файла в Excel в Visual Basic

    как найти общую ширину столбцов, выбранных в excel?

    Поместите SQL-аутентификацию в книгу Excel

    Как мне построить только внешний край кривой в Excel?

    Давайте будем гением компьютера.