Страница 1 из 1

Вввод и считывание с многоколоночного listbox

Добавлено: 27 ноя 2008, 17:49
AlexZZZ
Всех категорически привествую!
Есть вопрос. Трёхколоночный listbox отображает наименование выбранного товара, количество и стоимость. Можно ли организовать построчный ввод в listbox, а также считывание данных из его выделенной строки без промежуточного ввода данных в лист Excel? Список формируется и "живёт", пока открыта пользовательская форма.

Наименование товара_____Количество______Цена
-------------------------------------------------------------
Аспирин________________100_____________5,70
Анальгин ______________2000_____________10,6

Re: Вввод и считывание с многоколоночного listbox

Добавлено: 27 ноя 2008, 18:02
Naeel Maqsudov
Если ListBox связан с диапазоном ячеек, но надо вводить данные в ячейки и изменять свойство ListFillRange.
Если это свободный ListBox, то см. свойство Column.
Ну а чтение естественно через через Column, так как просто Value дает значение только одного (связанного (BoundColumn)) столбца.

Re: Вввод и считывание с многоколоночного listbox

Добавлено: 27 ноя 2008, 22:50
AlexZZZ
Спасибо! Со считыванием через Column разобрался. А вот изменять с его помощью "свободный" listbox не получается, вероятно потому, что это свойство, а не метод.

Re: Вввод и считывание с многоколоночного listbox

Добавлено: 28 ноя 2008, 01:11
Naeel Maqsudov
Погорячился я. Все оказалось не так просто.

Код: Выделить всё

Sub aaa()
  'Инициализация списка
  Dim h(0 To 4, 0 To 0)
  With ListBox1
    .Clear
    h(0, 0) = "head1"
    h(1, 0) = "head2"
    h(2, 0) = "head3"
    h(3, 0) = "head4"
    h(4, 0) = "head5"
    .Column = Array("f1", "f2", "f3", "f4", "f5")
    .ColumnCount = UBound(.Column, 1) + 1
  End With
  
  
  'добавление элементов
  AddRecord ListBox1, 12, "cdccdc", 77, 44, 55, 77
  AddRecord ListBox1, 54, "qwe", 33, "qwe"
  AddRecord ListBox1, 14, "qwe", , , 33
  AddRecord ListBox1, 14, "qwe", 65, "blabla", 55
  AddRecord ListBox1, 14, "qwe", , 33
  AddRecord ListBox1, 14, "qwe", 33

End Sub

Sub AddRecord(Where As MSForms.ListBox, ParamArray Record())
On Error Resume Next
  With Where
    i = .ListCount
    n = UBound(.Column, 1)
    If UBound(Record) < n Then n = UBound(Record)
    If n > 1 Then
      i = .ListCount
      .additem Record(0), i
      For j = LBound(Record) To n
        If Not IsMissing(Record(j)) Then .Column(j, i) = Record(j)
      Next
    End If
  End With
End Sub


Re: Вввод и считывание с многоколоночного listbox

Добавлено: 28 ноя 2008, 12:36
AlexZZZ
Спасибо огромное! Всё работает.