Как правильно добавлять элементы в мультисписок? - PullRequest
0 голосов
/ 19 июня 2020

Я использую vba для получения номеров оборудования и соответствующей информации и помещения их в список. Пользователь вводит номер оборудования, который ему нужен, и Excel извлекает информацию. Однако, когда я нажимаю кнопку «Получить данные» в первый раз, все работает нормально. Когда я делаю это второй раз для другого номера оборудования, я получаю сообщение «Не удалось установить свойство List. Недопустимый индекс массива свойств». Вот мой код:

Dim value As Long

Public i As Integer

    Private Sub GetDataButton_Click()

    Dim num As Variant

value = EquipmentNumber.value

    For Each num In Sheets("S1 Cvtg Eqt List").Range(Range("B1"), Range("B1").End(xlDown))

        If num = value Then


            MWOList.AddItem (num)
            MWOList.List(i, 1) = (num.Offset(0, 1))
            MWOList.List(i, 2) = (num.Offset(0, 2))
            MWOList.List(i, 3) = (num.Offset(0, 3))
            MWOList.List(i, 4) = (num.Offset(0, 4))
            MWOList.List(i, 5) = (num.Offset(0, 5))

    i = i + 1

End If

 Next num

 i = i + 1

 End Sub

1 Ответ

1 голос
/ 19 июня 2020

Попробуйте ниже, обратите внимание, что я изменил не только объявление «i» и значение на publi c, но также позиция столбца списка начинается с 0, поэтому, если это таблица из 6 элементов, переключите ее обратно.

Причина, по которой у вас возникла ошибка, на самом деле была другая итерация «i» «i = i + 1» после l oop, строки списка также начинаются с 0, поэтому вы добавили второй индекс и попытались вставьте его в третью позицию.

Public value As Long
Public i As Integer
Private Sub GetDataButton_Click()

Dim num As Variant

value = EquipmentNumber.value

For Each num In Sheets("S1 Cvtg Eqt List").Range(Range("B1"), Range("B1").End(xlDown))

If num = value Then
    i = MWOList.ListCount 'set i to available space
    MWOList.AddItem
    MWOList.List(i, 0) = (num.Offset(0, 1))
    MWOList.List(i, 1) = (num.Offset(0, 2))
    MWOList.List(i, 2) = (num.Offset(0, 3))
    MWOList.List(i, 3) = (num.Offset(0, 4))
    MWOList.List(i, 4) = (num.Offset(0, 5))

End If

Next num

EquipmentNumber = ""

End Sub
...