Идентификатор прохода Excel VBA в поле со списком

Нужен совет о том, как лучше всего передать идентификатор значения в параметр в excel VBA.

По сути, я пытаюсь воспроизвести получение значения, а не самого текста, например, в html:

<option value="1">Option one</option>

Вернул бы 1. Я мог бы объединить идентификатор с началом или концом строки с чем-то вроде:

.additem varList(0, 1) & " | " & varList(1, 1)

Но я ищу «более чистый» вариант, если это имеет смысл?

Ваше здоровье


person Gareth    schedule 04.02.2014    source источник
comment
Извините, но мне непонятно, о чем вы спрашиваете.   -  person    schedule 04.02.2014
comment
Это вообще непонятно. Можете ли вы дать больше контекста?   -  person wingyip    schedule 04.02.2014
comment
Извините, я затрудняюсь сформулировать, что я имею в виду! Таким образом, поле со списком заполняется значениями из таблицы в базе данных. Когда форма отправляется, я ищу идентификатор из таблицы для отправки, а не соответствующее значение - помогает ли это?   -  person Gareth    schedule 04.02.2014
comment
не совсем. Как вы получаете ID of a value?   -  person    schedule 04.02.2014
comment
Через ADO возвращает набор записей в вариант, а затем перебирает значения в варианте, чтобы заполнить поле со списком. Вариант загружается с идентификатором и значением.   -  person Gareth    schedule 04.02.2014
comment
Гарет - спасибо за этот вопрос. Я опоздал на это более чем на четыре года, но это имеет смысл, и объяснение Дэвида Земенса было идеальным. Как частый пользователь ADO, этот метод намного лучше, чем использование визуализированного текста в поле со списком для моего предложения «ГДЕ». БОЛЬШОЙ + 1 вам и Дэвиду! :)   -  person JimT    schedule 30.08.2018


Ответы (1)


Создайте поле со списком как минимум с двумя столбцами. Это можно установить с помощью свойства ColumnCount, через VBE или через код VBA.

введите здесь описание изображения

Затем вы можете настроить свойство ColumnWidths, чтобы сделать один из столбцов шириной 0, чтобы он не отображался/видим для пользователей.

КОГДА вы заполняете поле со списком, просто поместите идентификатор в один столбец поля со списком и поместите значение в другой видимый столбец. Интерфейс будет выглядеть так, если вы не отрегулируете ширину столбцов

введите здесь описание изображения

Используйте BoundColumn в поле со списком, чтобы вернуть соответствующее значение, или вы можете выполнить некоторую итерацию по выбранным элементам и обратиться к проиндексированной позиции:

Debug.Print Me.ComboBox.List(0, 0)  '# Display the first row item in the first column

Debug.Print Me.ComboBox1.List(0, 1)  '# Display the first row item in the SECOND column
person David Zemens    schedule 04.02.2014
comment
Спасибо @David Zemens, это прекрасно! Спасибо, что смогли разобраться и в вопросах! - person Gareth; 06.02.2014
comment
Как вставить строку с двумя столбцами. Я попробовал .AddItem "CO", "Cam Operation", но он вернул несоответствующий тип. Я пытался использовать CO как ID. Является ли это возможным? - person rvbarreto; 03.02.2015
comment
Метод .AddItem принимает два аргумента: значение и столбец. Вы не можете использовать метод .AddItem для добавления нескольких столбцов. Вместо этого вы можете использовать его для добавления первого столбца, а затем указать значение второго столбца с помощью метода .List. Пример: .AddItem("CO", 0), а затем .List(0, 1) = работа кулачка` - person David Zemens; 03.02.2015