Mira yo cree este procedimiento
Sub llenarCombo(tabla As String, campo As String, listarDistintos As Boolean, cbo As Control, Optional condicion As String, Optional campoValue As String)
Dim rs As New ADODB.Recordset
Dim sql As String
If listarDistintos Then
sql = "SELECT DISTINCT " & campo
Else
sql = "SELECT * "
End If
sql = sql & " FROM " & tabla
If condicion <> "" Then
sql = sql & " " & condicion
End If
rs.Open sql, cnn, adOpenDynamic, adLockReadOnly
rs.MoveFirst
cbo.Clear
If campoValue <> "" Then
cbo.ColumnCount = 2
cbo.TextColumn = 1
cbo.ColumnWidths = "-1;0"
End If
Do While Not rs.EOF
DoEvents
If campoValue <> "" Then
cbo.AddItem rs.Fields(campo)
cbo.List(cbo.ListCount - 1, 1) = rs.Fields(campoValue)
Else
cbo.AddItem rs.Fields(campo)
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
Este procedmiento esta diseñado para ser usado con el ComboBox de Microsoft Forms 2.0 (Permite autocompletar)
Asume una conexion de nombre cnn ( o puedes agregarla como parametro -
cnn as ADODB.Conection)
Los parametros son
tabla: el nombre de la tabla
campo: el nombre del campo a listar
listarDistintos: si se desea usa DISTINCT ROW
cbo: el combobox (va por referencia)
Optional condicion: condicion a usar ("WHERE Id=100")
campoValue: nombre del campo valor ("Id")
ejemplo:
llenarCombo "GuiaCorreoDetalle", "Institucion", True, cboInstituciones
Llena un combo de nombre cboInstituciones con el campo Institucion de la tabla GuiaCorreoDetalle, y muesta usando DISCTINT ROW
llenarCombo "GuiaCorreoDetalle", "Destino", True, cboDestinos, "WHERE Destino IS NOT NULL"
llena un combo de nombre cboDestinos con el campo Destino de la tabla GuiaCorreoDetalle, y muestra usando DISTINCT ROW, y con la condicion de que no sean valores nulos
------------------------------------------------------------------------------------------------------
Puedes modificar el rpocedmiento para usarlo con un combobox normal
Se debe quitar el uso de la propiedad List, y trabajar con el ItemData
Adios