Para obtener tipos de datos y longitudes debes abrir un Recordset de la siguiente forma:
Private rsTablas As ADODB.Recordset
Set rsTablas = CN.OpenSchema(adSchemaTables)
El Schema de la conexión CN te ofrece la posibilidad de obtener los nombres de todas las tablas de una base de datos.
Para recoger los nombres de campos en una lista, por ejemplo:
Private rsCampos As ADODB.Recordset
Dim i As Integer
Do Until rsTablas.EOF
Set rsCampos = New ADODB.Recordset
If Left(rsTablas!TABLE_NAME, 2) <> "MS" Then
lstTablas.AddItem rsTablas!TABLE_NAME
rsCampos.Open "select * from " & rsTablas!TABLE_NAME, CN, adOpenKeyset, adLockReadOnly
For i = 0 To rsCampos.Fields.Count - 1
lstCampos.AddItem rsCampos.Fields(i).Name
Next i
End If
Set rsCampos = Nothing
rsTablas.MoveNext
Loop
rsTablas.Close
Con este trozo de código consigues cargar en la lstTablas todas las tablas y en lstCampos todos los campos de todas las tablas (pero esto lo puedes hacer como quieras: cuando hagas doble click en una tabla, que se carguen los campos de dicha tabla en la otra lista mediante el lstTablas.List(lstTablas.ListIndex) en vez del rsTablas!TABLE_NAME).
Si solamente necesitas el tipo de campo y longitud no hay problema:
Private rs As ADODB.Recordset
Dim Tabla As String
Tabla = lstTablas.List(lstTablas.ListIndex)
Set rs = New ADODB.Recordset
rs.Open "select " & lstCampos.List(lstCampos.ListIndex) & " from " & Tabla, cn, adOpenKeyset, adLockReadOnly
MsgBox "Nombre del campo: " & rs.Fields(