Скрыть пустые элементы списка ComboBox

У меня есть:

  • 3 столбца с данными
  • 3 массива
  • 3 комбобокса

Идея состоит в том, чтобы выбрать один элемент combobox и показать, что два других комбинированных кода показывают, какие данные находятся в других ячейках той же строки. У меня более 5000 строк данных и более ста пустых ячеек во всех трех столбцах. Есть несколько строк, где только одна или две из трех ячеек содержат данные. Если я не включаю пустые ячейки, я сталкиваюсь с проблемами с неправильными данными, отображаемыми в comboboxes, например, если Bar(3,5,10) пуст, элемент ComboBox1 Foo(11) не будет равняться элементу ComboBox2 Bar(11) , вместо этого отображается панель элементов ComboBox2 Bar(8) .

Мне нужен способ скрыть пустые элементы combobox из дротиста, но не удалять их из списка.

Код как образец

Форма:

 Private Sub UserForm_Initialize() Set FooBar = ActiveWorkbook.Sheets("foobar") Call PopulateArray(FooBar, 1, Foo) Call PopulateControl(Foo, UserForm1.ComboBox1) Call PopulateArray(FooBar, 2, Bar) Call PopulateControl(Bar, UserForm1.ComboBox2) Call PopulateArray(FooBar, 2, Baz) Call PopulateControl(Baz, UserForm1.ComboBox3) End Sub Private Sub ComboBox_Change() ViewSelected UserForm1.ActiveControl End Sub 

Модуль:

 Public Foo(), _ Bar(), _ Baz() As Variant Public FooBar As Worksheet Function PopulateArray(Source As Worksheet, Columns as Integer, Target as Variant) With FooBar For i = 0 To .UsedRange.Rows.Count - 1 ReDim Preserve Target(i): Target(i) = Cells(i + 1, Column) Next i End With End Function Function PopulateControl(Source As Variant, Target As Control) For i = 0 To UBound(Source) Target.AddItem Source(i) Next i End Function Function ViewSelected(Selected As control) Dim i As Integer: i = Selected.ListIndex For Each control in UserForm1.Controls If TypeName(control) = "ComboBox" Then control.ListIndex = i Next control End Function 

Пример данных

 Column 1 Column 2 Column 3 Foo1 Bar1 Baz1 Foo1 Bar1 Baz2 Foo1 Bar2 Baz3 Foo1 Bar2 Baz4 Foo2 Bar11 Baz11 Foo2 Baz12 'missing Bar11 Foo2 Bar12 Baz13 Foo2 Bar12 'missing Baz14 

Хорошо, я думаю, что что-то придумал. Это решение предполагает, что ваши массивы по-прежнему содержат пустые значения. Он также предполагает, что вы можете каким-то образом сопоставить выбранный элемент управления с соответствующим массивом.

Учитывая индекс одного столбца (выбранное значение), вы хотите узнать соответствующий индекс других столбцов, относящийся к числу пробелов в исходном столбце.

Итак, мы ищем исходный индекс в (в этом примере) соответствующий массив Foo :

 Dim i As Integer Dim j as Integer For i = 0 to Selected.ListIndex if Foo(i) = "" Then j = j + 1 j = j + 1 Next i 

Мы просто подсчитали количество пробелов до выбранного значения. Теперь вы знаете исходный индекс (включая пробелы) столбца, который выбрал пользователь. Наконец, мы смотрим соответствующее значение в каждом (другом) контроле, здесь, исходя из Bar и Baz :

 UserForm1.ComboBox1.Text = Bar(j) Userform1.ComboBox2.Text = Baz(j) 
  • Включить combobox из пользовательской формы в несколько листов на основе предоставленных значений
  • Использование элементов из комбинированного блока VBA (управление формой, внутри рабочего листа) для запуска макросов
  • Как заполнить поле со списком excel с базой данных с сервера sql
  • Как изменить количество выпадающих элементов, отображаемых для формы Excel VB6 Combobox
  • Как обновить содержимое файла перед его чтением?
  • Заполнение вопросов ComboBox - дублирование значений при каждом выборе поля, а именованный диапазон не заполняется
  • Выберите ComboBox AfterUpdate Excel VBA
  • Получите пользовательское значение ввода Excel ComboBox VBA
  • Excel VBA Userform - выполнить Sub, когда что-то изменится в динамическом comboBox
  • как изменить значение поля со списком при изменении значения текстового поля?
  • VBA Excel Сканирование диапазона ячеек и заполнение с помощью выбора ComboBox
  • Interesting Posts

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

    Ошибка открытия 2 файлов excel с использованием Aspose.Cells на Mono

    Excal-VBA: преобразовать строку числовых чисел в строки и добавить повторяющееся имя после

    Импорт данных в Excel с веб-страницы

    Как получить значение ячейки без перемещения итератора вперед – Excel, Java POI

    Countifs с вложенными OR

    Копирование и вставка Microsoft Excel с форматом даты

    Чтение Excel из URL с потоком памяти

    Excel 2013 Invalidate Ribbon control не работает

    Отображение разницы между двумя ячейками в строке состояния excel

    Копирование из одной книги в Excel в другую книгу

    Невозможность сравнивать значения, когда я читаю из файла CSV

    Excel AutoFilter между двумя пользовательскими входами

    Разделение содержимого ячейки в файле CSV на отдельные ячейки

    Powershell: извлечение списка IP-адресов, разделенных запятыми?

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