Haber si te vale esta funcion:(la utlizo yo en mis aplicaciones)
Public Sub PRCg_Cargar_Combos(oCombo As Control, RS As ADODB.Recordset, _
Optional iNumCols As Integer = 2, Optional bPorNombres As Boolean)
'*iNumCols es el nº de columnas del recordset, empezando por orden, que se añadiran en Grid,Combo o DropDown
'* Si se pasa un 0 se cogeran todos los campos del recordset
Dim i As Integer, sFila As String
Dim sValor As String
If (Not TypeName(oCombo) Like "SS*DBCombo") _
Or (Not TypeName(oCombo) = "SSOleDropDown") _
Or (Not TypeName(oCombo) = "SSOleDBGrid") Then
oCombo.RemoveAll
If Not RS Is Nothing Then
While Not RS.EOF
iNumCols = Switch(iNumCols = 0, RS.Fields.Count, _
iNumCols <= (RS.Fields.Count), iNumCols, _
True, RS.Fields.Count)
sFila = ""
If Not bPorNombres Then
'*rellena el combo, grid, ... con los valores de las columnas del recordset
'*en = orden q recordset
For i = 0 To iNumCols - 1 'rs.Fields.Count - 1
sFila = sFila & IIf(i > 0, vbTab, "") & Trim(RS.Fields(i).Value)
Next i
Else
'*rellena el combo, grid, ... con los valores de las columnas del recordset
'*comprobando los nombres de columnas del grid y si existe en Recordset se carga
'*sino lo deja vacío
For i = 0 To iNumCols - 1 'rs