VBA - Excel Listbox - искать дубликаты при добавлении элементов во второй список - PullRequest
0 голосов
/ 17 апреля 2019

Итак, я новичок в области форм кодирования VBA, и мне кажется, что я немного борюсь с этим.

Что я сделал, так это следовал этому уроку:

https://www.excel -easy.com / vba / examples / множественный список-box-selections.html

И я адаптировал его так, чтобы он соответствовал моим потребностям, но теперь у меняили две проблемы, которые я не понимаю, как я могу решить.

Код в учебнике добавляет два поля списка в форму, а затем кнопка добавления копирует элементы из первого списка во второй, а кнопка удаления удаляетэлементы из второго списка.

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

Приведенный ниже код - это то, что я до сих пор придумал, но я получаю ошибку:

Private Sub btn_Add_Filter_Click()

    For i = 0 To lbx_Filters_List.ListCount - 1

        If lbx_Filters_List.Selected(i) = True Then

            For X = 0 To lbx_Filters.ListCount

                If Not IsError(lbx_Filters.List(X)) Then

                    mVal = 0

                    If lbx_Filters.List(X) <> "" And lbx_Filters.List(X) = lbx_Filters_List.List(i) Then

                        myVal = 1

                    End If

                End If

                 If myVal = 0 Then

                    lbx_Filters.AddItem _
                    lbx_Filters_List.List(i)

                 End If

            Next X

        End If

    Next i

End Sub

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

If Not IsError(lbx_Filters.List(X)) Then

Ошибка:

Не удалось получить свойство списка.Неверный индекс массива свойств

1 Ответ

0 голосов
/ 29 апреля 2019

Я в итоге (с помощью комментариев выше) решил проблему.Спасибо всем, кто помог.

Private Sub btn_Add_Filter_Click()

    Dim Size As Integer
    Size = lbx_Filters.ListCount
    Dim ListBoxContents() As String
    Dim ListBoxC() As Variant

    Dim i As Integer, y As Integer, X As Integer, myVal As Integer, lItem As Integer

    myVal = 0

    For i = 0 To lbx_Filters_List.ListCount - 1

        If lbx_Filters_List.Selected(i) = True Then

            If Size > 0 Then

                For lItem = 0 To lbx_Filters.ListCount - 1

                    For X = 0 To lbx_Filters_List.ListCount - 1

                        If Not IsError(lbx_Filters_List.List(X)) And lbx_Filters.List(lItem) = lbx_Filters_List.List(i) Then

                            myVal = 1

                        End If

                    Next X

                Next lItem

            End If

            If myVal = 0 Then

                lbx_Filters.AddItem _
                lbx_Filters_List.List(i)

            End If

        End If

    Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...