Не удается получить определенные элементы из коллекции в Excel VBA, даже если .count является правильным - PullRequest
0 голосов
/ 23 июня 2019

Я добавил в свою коллекцию предметы под названием "Вопросы"Я знаю, что это добавляет элементы в коллекцию, потому что Questions.count - правильный результат в различных сценариях.Однако я не могу извлечь значение отдельных элементов в коллекции.

Это дает мне следующую ошибку: "Недопустимый вызов процедуры или аргумент"

Так что, очевидно, должно бытьчто-то простое, что я не понимаю в коллекциях (я только недавно узнал о них, пожалуйста, будьте терпеливы со мной).

Я использую методы, которые я нашел в Интернете, в частности:

Сайт https://excelmacromastery.com/excel-vba-collections/ говорит, что я должен быть в состоянии сделать это:

"Вы также можете использовать свойство Item для доступа к элементу в коллекции. Это метод по умолчанию для коллекции, поэтомуследующие строки кода эквивалентны:

    Debug.Print coll(1)
    Debug.Print coll.Item(1)"

Не работает для меня, не знаю почему.

'[1] SELECT BOX
Dim SelectedBox As Long
    SelectedBox = Box 'NEED TO CONVERT RESULT OF FUNCTION "BOX" TO A VARIABLE WITH TYPE LONG

'[2] TEST CRITERIA FOR QUESTION
Dim Questions As New Collection

Dim SubjectRange As Long
    SubjectRange = ThisWorkbook.Sheets(cmbTopics.Text).Cells(Rows.Count, "A").End(xlUp).Row

Dim BoxMatch As Boolean
Dim ChapterMatch As Boolean

'TEST EACH QUESTION IN TOPIC (DETERMINED BY LISTBOX SELECTIONS)
For X = 2 To SubjectRange
BoxMatch = False 'SAYS WHETHER IT PASSED THE TEST
ChapterMatch = False 'SAYS WHETHER IT PASSED THE TEST

    'IS QUESTION IN THE RIGHT BOX?
    If ThisWorkbook.Sheets(cmbTopics.Text).Range("D" & X).Value = SelectedBox Then
    BoxMatch = True
    End If

    'IS QUESTION IN THE RIGHT CHAPTER?
    For Y = 0 To lbChapters.ListCount - 1
    If _
        lbChapters.List(Y) = ThisWorkbook.Sheets(cmbTopics.Text).Range("B" & X).Value And _
        lbChapters.Selected(Y) = True _
    Then
    ChapterMatch = True
    Next Y

    'IF SO, THEN ADD IT TO THE LIST OF CANDIDATE QUESTIONS ("QUESTIONS")
    If BoxMatch = True And ChapterMatch = True Then
    Questions.Add ThisWorkbook.Sheets(cmbTopics.Text).Range("A" & X).Value
    End If

Next X

'MsgBox ("Matches: " & Questions.Count)

Dim n As Long
    n = RndBetween(1, Questions.Count)
MsgBox (Questions.Item(n))

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

1 Ответ

1 голос
/ 23 июня 2019

Я видел, вы сказали, что Questions.count должен быть больше 0, но это приведет к ошибке, которую вы видите. Чтобы быть уверенным, вы должны добавить:

If Questions.count > 0 then
    MsgBox (Questions.Item(n))
Else
    MsgBox ("Questions was empty")
end if

Также убедитесь, что «n» возвращается как целое число.

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