无法从Excel VBA中的集合中检索特定项,即使。计数正确

无法从Excel VBA中的集合中检索特定项,即使。计数正确,excel,vba,collections,Excel,Vba,Collections,我已向我的收藏中添加了名为“问题”的项目。我知道它会将项目添加到集合中,因为在各种情况下,Questions.count是正确的结果。但是,我无法提取集合中单个.items的值 它给了我以下错误:无效的过程调用或参数 所以很明显,关于我最近才了解的藏品,一定有一些基本的东西我不了解,请耐心等待 我正在使用我在网上找到的方法,特别是: 网站上说我应该能够做到这一点: 还可以使用Item属性访问集合中的项。它是集合的默认方法,因此以下代码行是等效的: Debug.Print coll(1)

我已向我的收藏中添加了名为“问题”的项目。我知道它会将项目添加到集合中,因为在各种情况下,Questions.count是正确的结果。但是,我无法提取集合中单个.items的值

它给了我以下错误:无效的过程调用或参数

所以很明显,关于我最近才了解的藏品,一定有一些基本的东西我不了解,请耐心等待

我正在使用我在网上找到的方法,特别是:

网站上说我应该能够做到这一点:

还可以使用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))

我希望能够提取应该位于代码指定位置的字符串。

我看到您说Questions.count应该大于0,但这将导致您看到的错误。为确保这一点,您应该添加:

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

还要检查n是否作为整数返回。

旁注;如果BoxMatch=True和ChapterMatch=True,那么可以简化为如果BoxMatch和ChapterMatch=True,那么很好,我一直在尝试简化我的代码。伟大的贡献!是的,这解决了问题。在设置值之前,我在另一个地方运行函数,表单在那里初始化。因此,即使在这里的代码中,我已经确保了Box函数中的集合不会为零,这里没有包含,但函数运行的其他地方不是这样。永远不会发现这一点,谢谢。您不需要after-MsgBoxJFYI集合。Count返回一个长值,Collection。Itemn接受一个长值,因此在任何情况下我都会坚持使用长值。此外,vba还将整数存储为长数据类型,因此使用整数没有实际好处。除非出现一些边缘情况,否则如果我不清楚,请道歉,但我是指普通语言意义上的整数,即整数,而不是编码,因为我不确定RndBetween函数返回的是什么,我担心它可能是十进制的。