2015-11-04 5 views
1

Я возился с VBA, особенно со списками.Добавление строк в MultiColumn ListBox

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

Он может добавлять результаты поиска в список, но если мы хотим, чтобы вся строка была найдена, как мы ее добавим, вместо того, чтобы делать что-то вроде этого vba listbox multicolumn add?
Как это сделать, используя VBA?
Возможно ли это?
Else, можно ли без VBA?

Что происходит:

Data table: a | b | c | d | e 
      1 | 2 | 3 | 4 | 5 
Search: a 
Listbox : a 

Search: 1 
Listbox : 1 

Search: 2 
Listbox : 2 

Search: d 
Listbox : d 

То, что я "хочу":

Data table: a | b | c | d | e 
      1 | 2 | 3 | 4 | 5 

Search: a 
Listbox: a | b | c | d | e 

Search: 1 
Listbox: 1 | 2 | 3 | 4 | 5 

Search: 2 
Listbox: 1 | 2 | 3 | 4 | 5 

Search: d 
Listbox: a | b | c | d | e 

Если это необходимо, я могу предоставить код, я использую для тестирования поиска.

ответ

1

Доступ к элементам в многоколоночном списке можно получить, используя элемент .List. Этот элемент принимает два параметра в качестве входных данных:

ListBox1.List(RowIndex, ColumnIndex) 

RowIndex: индекс строки для записи мы хотим получить доступ. Обратите внимание, что строки в списке отображаются на основе нуля. Для этого индекс первой строки равен .

ColumnIndex: Индекс столбца поля, к которому мы хотим получить доступ. Обратите внимание, что столбцы в списке нескольких столбцов также нулевые индексируются. Поэтому первая колонка имеет индекс .

Например:

'Assign values to the columns 
For i = 1 To 9 
    ListBox1.AddItem 'Create a new row 
    ListBox1.List(i - 1, 0) = i 'Fill the first column 
    ListBox1.List(i - 1, 1) = i * 10 
    ListBox1.List(i - 1, 2) = i * 100 
    ListBox1.List(i - 1, 3) = i * 1000 
Next i 

Альтернативно

, но если мы хотим, чтобы весь ряд из которых результат поиска, как мы добавим его, вместо того, чтобы делать что-то вроде этого Vba ListBox многоколоночный добавить?

Предполагая, что у вас есть объект диапазона (например, rngFound), которые представляют собой результат вашего .Find:

Me.ListBox1.Clear 
Me.ListBox1.ColumnCount = rngFound.Columns.Count 
Me.ListBox.RowSource = rngFound.Address 
+2

Хорошее объяснение. Я также отредактировал его, чтобы включить вариант использования метода «RowSource» в качестве альтернативы. –

+0

Немного объяснения! – svacxpython

+1

@DavidZemens: thx для редактирования, я забыл о 'RowSource', поскольку я не использовал его за несколько лет! Но приятное завершение и фактический ответ OP! ;) – R3uK

Смежные вопросы