Откуда берется моя «ошибка совместимости»? - PullRequest
1 голос
/ 15 апреля 2020

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

Но когда я выполняю код, у меня возникает ошибка совместимости типа ". Я думаю, что это происходит из строки, где я вызываю мой саб. Но я не нашел способ исправить что с 3 дней.

var 'cellulePrecedente' представляет текст в ячейке, который был прочитан итерацией ранее, содержание может повторяться несколько раз, поэтому я добавляю название курса только тогда, когда оно отличается от предыдущий. Чтобы не писать два раза один и тот же курс.

Я также беру любые советы, так как я начинающий в VBA.

Вот код:

Private Sub UserForm_Initialize()
    ' On va appeler, pour chaque listbox a remplir la méthode d'initialisation
    Call Initialiser_ListBoxs("Cours Ig", "D", ListBox1)
End Sub

Private Sub Initialiser_ListBoxs(Feuille As String, ColonneDepart As String, ListBoxConcernee As ListBox)
    Dim CellulePrecedente As String
    ' On doit fournir la feuille dans laquelle on doit rechercher les éléments, la colonne de depart (si on fait les cours ou les ue
    ' Il faut aussi fournir la listbox a remplir
    Sheets(Feuille).Activate
    ' On sélectionne la cellule correspondant au point de départ (1er cours/1ere UE)
    ' La première ligne étant le titre de la colonne
    Range(ColonneDepart & "2").Select
    CellulePrecedente = ""
    ' On continue de parcourir tant que tous les cours/UE n'ont pas été lu(e)s
    While Range(ColonneDepart & ActiveCell.Row) <> ""
        ' On ne réécrit pas 2 fois le/la même cours/UE
        If CellulePrecedente <> Range(ColonneDepart & ActiveCell.Row) Then
            ListBoxConcernee.AddItem Range(ColonneDepart & ActiveCell.Row)
        End If
        CellulePrecedente = Range(ColonneDepart & ActiveCell.Row)
        Range(ColonneDepart & ActiveCell.Row + 1).Select
    Wend
End Sub

Спасибо за помощь!

PS: я знаю, что код написан на французском, но я изо всех сил пытался объяснить, как он работает. Я предполагаю, что вы не все понимаете, не стесняйтесь sk любой вопрос!

1 Ответ

2 голосов
/ 15 апреля 2020

Изменение:

Private Sub Initialiser_ListBoxs(Feuille As String, ColonneDepart As String, _
                             ListBoxConcernee As ListBox)

К:

Private Sub Initialiser_ListBoxs(Feuille As String, ColonneDepart As String, _
                             ListBoxConcernee As MSForms.ListBox)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...