Olá!
Você está cometendo um equívoco na criação dessas classes. Esse erro acontece, como diz na própria descrição, porque sua classe COL_Produtos não é uma coleção e sim um container de um Hashtable, por isso você não pode usar um For Each nela. Você está na verdade armazenando os items nessa Hashtable, então a iteração nos items teria que ser feita nela, tipo:
For Each vlTeste In vlTestes.mCol
Essa não é a melhor maneira de fazer, eu costumo criar minha coleção derivando da classe CollectionBase, e sobrepondo alguns membros dela pra "tipar" os items de acordo com o objeto que vou armazenar. Exemplo:
Imports System
Imports System.Collections
Public Class COL_Produtos
Inherits CollectionBase
Default Public Property Item(index As Integer) As CLS_Produto
Get
Return CType(List(index), CLS_Produto)
End Get
Set
List(index) = value
End Set
End Property
Public Function Add(value As CLS_Produto) As Integer
Return List.Add(value)
End Function
Public Function IndexOf(value As CLS_Produto) As Integer
Return List.IndexOf(value)
End Function
Public Sub Insert(index As Integer, value As CLS_Produto)
List.Insert(index, value)
End Sub
Public Sub Remove(value As CLS_Produto)
List.Remove(value)
End Sub
Public Function Contains(value As CLS_Produto) As Boolean
Return List.Contains(value)
End Function
End Class
Public Class CLS_Produto
Public Sub New(ByVal id As Integer, ByVal nome As String)
Me.ProdutoId = id
Me.Nome = nome
End Sub
Public m_ProdutoId As Integer
Public m_Nome As String
Public Property ProdutoId() As Integer
Get
Return m_ProdutoId
End Get
Set(ByVal Value As Integer)
m_ProdutoId = Value
End Set
End Property
Public Property Nome() As String
Get
Return m_Nome
End Get
Set(ByVal Value As String)
m_Nome = Value
End Set
End Property
End Class
Pra armazenar e iterar os items da coleção:
Dim produtos As New COL_Produtos
For i As Integer = 1 To 10
produtos.Add(New CLS_Produto(i, "Produto" & i))
Next
For Each produto As CLS_Produto In produtos
Debug.WriteLine(produto.Nome)
Next
Pra lista os items você pode fazer assim também, já que com CollectionBase permite a criação da propriedade Item indexada.
For i As Integer = 0 To produtos.Count - 1
Debug.WriteLine(produtos(i).Nome)
Next
Espero ter ajudado!