Я добавил в свою коллекцию предметы под названием "Вопросы"Я знаю, что это добавляет элементы в коллекцию, потому что 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))
Я хочу иметь возможность извлечь строку, которая должна быть вместоположение, указанное кодом.