从集合中检索项目

可以通过调用 .Item 函数从 Collection 中检索项目。

句法:

.Item(index)
参数 描述
指数 要从 Collection 中检索的项目。如果传递的值是数字类型或带有数字子类型的 Variant,则它将被解释为数字索引。如果传递的值是包含字符串的 StringVariant,则它将被解释为键。如果传递了 Collection 中不存在的 String 键,则会产生运行时错误 5:无效的过程调用或参数。如果传递的数字索引在 Collection 中不存在,则会产生运行时错误 9:下标超出范围

笔记:

  • .ItemCollection 的默认成员。这允许语法的灵活性,如下面的示例用法所示。
  • 数字索引是从 1 开始的。
  • 密钥区分大小写。.Item("Foo").Item("foo") 指的是同一把键。
  • 指标参数隐式转换为数字从 String,反之亦然。.Item(1).Item("1") 完全有可能参考 Collection 的不同项目。

样本使用(索引):

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"
        .Add "Two"
        .Add "Three"
        .Add "Four"
    End With
     
    Dim index As Long
    For index = 1 To foo.Count
        Debug.Print foo.Item(index) 'Prints One, Two, Three, Four
    Next
End Sub

样本用法(键):

Public Sub Example()
    Dim keys() As String
    keys = Split("Foo,Bar,Baz", ",")
    Dim values() As String
    values = Split("One,Two,Three", ",")
        
    Dim foo As New Collection
    Dim index As Long
    For index = LBound(values) To UBound(values)
        foo.Add values(index), keys(index)
    Next
     
    Debug.Print foo.Item("Bar") 'Prints "Two"
End Sub

示例用法(替代语法):

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One", "Foo"
        .Add "Two", "Bar"
        .Add "Three", "Baz"
    End With
    
    'All lines below print "Two"
    Debug.Print foo.Item("Bar")     'Explicit call syntax.
    Debug.Print foo("Bar")          'Default member call syntax.
    Debug.Print foo!Bar             'Bang syntax.
End Sub

请注意,允许使用 bang(!)语法,因为 .Item 是默认成员,可以使用单个 String 参数。这种语法的效用值得怀疑。