Управление списком из 11 столбцов

У меня есть список из 11 столбцов. Когда я пытаюсь добавить данные в один из столбцов, я получаю сообщение об ошибке.

ListBox1.Column(10, j) = shtG.Cells(k, 13)

Я не понимаю, почему это происходит, список в пользовательской форме имеет ColumnCount 11.

Я получаю ошибку:

«Ошибка выполнения 380: невозможно установить свойство столбца. Недопустимое значение свойства».

Значение выбранной ячейки - «Группа 16».


Дополнительная информация:

Код:

'adding this doesn't help
ListBox1.Clear
ListBox1.ColumnCount = 20

    While shtG.Cells(k, 1) <> ""
        If 'some long working condition Then

            frmTP.ListBox1.AddItem (shtG.Cells(k, kolID))
            frmTP.ListBox1.Column(1, j) = shtG.Cells(k, kolVnm) & strSpace & shtG.Cells(k, kolTV) & strSpace & shtG.Cells(k, kolAnm)
            frmTP.ListBox1.Column(2, j) = shtG.Cells(k, 5)
            frmTP.ListBox1.Column(3, j) = shtG.Cells(k, 6)
            frmTP.ListBox1.Column(4, j) = shtG.Cells(k, 7)
            frmTP.ListBox1.Column(5, j) = shtG.Cells(k, 8)
            frmTP.ListBox1.Column(6, j) = shtG.Cells(k, 9)
            frmTP.ListBox1.Column(7, j) = shtG.Cells(k, 10)
            frmTP.ListBox1.Column(8, j) = shtG.Cells(k, 11)
            frmTP.ListBox1.Column(9, j) = shtG.Cells(k, 12)
            frmTP.ListBox1.Column(10, j) = shtG.Cells(k, 13)
            j = j + 1
        End If
        k = k + 1
    Wend

person Grafit    schedule 04.12.2015    source источник
comment
Вы можете использовать только 10 столбцов, если используете .AddItem. Вам нужно поместить данные в массив, а затем назначить его свойству .List элемента управления.   -  person Rory    schedule 04.12.2015
comment
Что в shtG.Cells (k, 13)? Что странного в этой камере? Если вы закомментируете все остальные задания, это сработает или все еще не работает?   -  person nicomp    schedule 04.12.2015
comment
см. этот вопрос SO. Ответ не отмечен, но работает.   -  person Scott Holtzman    schedule 04.12.2015
comment
Рори: Я действительно не понимаю, что ты имеешь в виду. Можете привести пример? Или вы просто имеете в виду, что я должен использовать .List вместо .Column? DelmerNicholson: В ячейке нет ничего странного, это просто строка с надписью Group 16. ScottHoltzman: Они просто означают, что я должен использовать .List вместо .Column?   -  person Grafit    schedule 04.12.2015
comment
@Grafit - Да, я так думаю. Протестировал и очень хорошо работает :)   -  person Scott Holtzman    schedule 04.12.2015
comment
возможный дубликат Добавление элементов в список с несколькими столбцами   -  person Scott Holtzman    schedule 04.12.2015


Ответы (1)


Я имею в виду именно такие вещи (вы можете улучшить производительность, загрузив данные листа в массив, чтобы начать и обработать его, а не изменять размер массива так часто, но это отвлечет от ключевой идеи здесь!):

Dim vData()
j = 0
While shtG.Cells(k, 1) <> ""
    If 'some long working condition Then
        ReDim Preserve vData(0 To 10, 0 To j)
        vData(0, j) = shtG.Cells(k, kolID).Value
        vData(1, j) = shtG.Cells(k, kolVnm) & strSpace & shtG.Cells(k, kolTV) & strSpace & shtG.Cells(k, kolAnm)
        vData(2, j) = shtG.Cells(k, 5)
        vData(3, j) = shtG.Cells(k, 6)
        vData(4, j) = shtG.Cells(k, 7)
        vData(5, j) = shtG.Cells(k, 8)
        vData(6, j) = shtG.Cells(k, 9)
        vData(7, j) = shtG.Cells(k, 10)
        vData(8, j) = shtG.Cells(k, 11)
        vData(9, j) = shtG.Cells(k, 12)
        vData(10, j) = shtG.Cells(k, 13)
        j = j + 1
    End If
Wend
frmTP.ListBox1.Column = vData
person Rory    schedule 04.12.2015
comment
Извините за мою запоздалую реакцию. Это работает как амулет, за исключением одного момента. Если мои vData пусты, я получаю то же runtime error 380, что и раньше. Я попытался проверить, пуст ли мой массив с помощью: If Len(Join(vdata)) <> 0 Then, но с этим оператором я получаю runtime error 5: Invalid procedure call or argument. - person Grafit; 11.12.2015
comment
Просто проверьте значение j - person Rory; 11.12.2015