The Collection object you're trying to use is actually a holdover from VB6, and it's a fairly simple and "stupid" animal. Most of us have moved on in favor of "Generics" ... where List(of) exists...
Collections aren't type-specific,which means you can throw anything into them. This can be handy, but it can present problems. You can throw a recordset in there for index 1, and then right after that, add a string, and an integer, and a form, and ... quite literally, anything.

Lists on the other hand are type specific, so once you define it and what the list will hold, that's the only thing you can throw in there. so if I have Dim ListONumber as new List(Of Integer) ... I can't do this: ListONumber.Add Form1 ... that will throw an error at compile.

Now, if you want to store things with in a Key/Value pair, then what you likely want is a Dictionary(Of K, T) This allows you to add values of type T, using a key of type K ....
Dim Cards as new Dictionary(Of String, Integer)
Cards.Add("AS", 11)
Cards.Add("10S", 10)

I can retrieve the value in either way:
Cards(0) -- Ace of spades
Cards("AS") -- also Ace of spades

The advantage here though, is that unlike the Collection object, the Dictionary does expose the Keys as a collection field (not Collection) that you can iterate through.
Code:
        For Each k As String In Cards.Keys
            MessageBox.Show(k)
        Next

There is also a Cards.Values collection you can run through as well...

-tg