Ok, vamos con ello pues :)
En el diseñador de formularios...
Lo primero es añadir a ese combo un datasource con un select seleccionando 2 columnas, la primera el ID del usuario (la clave, el identificador numérico único del usuario) y el nombre completo del usuario (le llamaremos nombre_cliente). El select quedaría algo así "select ID, nombre_cliente from clientes order by nombre_cliente"
Después en el combo pondremos que tiene 2 columnas, con el ancho "0;5" (para que oculte la columna del ID y muestre sólo el nombre_cliente)
Luego ponemos como columna dependiente la 1, para que cuando se seleccione un nombre, devuelva sólo el ID como value.
Pondremos "limitar a la lista" = false para que nos permita escribir en el campo, y en caso de escribir un nombre que no está, poder añadirlo (esto nos permite usar el evento "NotInList")
También cambiamos la propiedad autocomplete a true
Creamos código en el evento NotInList de cara a gestionar qué es lo que hacemos cuando el cliente escribe un nombre que no está en la base de datos. Lo primero sería añadir el cliente a la base de datos.
(Aquí convendría hacerlo de otra manera de cara a hacer una aplicación segura y que un usuario no pudiera hacer SQL Injections... pero lo vamos a simplificar)
if notisnull(combobox) then
Docmd.executesql "Insert into clientes(nombre_cliente, teléfono, email) values " & combobox & ",'555-555-555','[email protected]')"
end if
combobox.requery
'Con esto insertaríamos el cliente en la base de datos. Asumo que el ID es un autonumérico. 'El requery es para que recargue el combobox con el cliente nuevo.
' Añadiríamos el código para encontrar el ID del cliente que acabamos de añadir
dim rs as recordset
dim db as database
dim ultimo_id_anadido as integer
set db=currentdb
set rs=db.openrecordset("select last(id) as ultimo_id from clientes",dbopendynaset)
if rs.recordcount>0 then
ultimo_id_anadido=cint(rs.fields("ultimo_id))
else
' (No hay ningún registro en la base de datos)
end if
rs.close
call carga_datos(ultimo_id_anadido)
' Así tendríamos el último ID en la variable ultimo_id_anadido
' Después creamos una sub para que cargue los datos en el formulario, según un ID seleccionado, así nos servirá el mismo código para los 2 casos que planteas
private sub carga_datos(id_cliente as integer)
me.recordsource="select * from clientes where id=" & id_cliente
end sub
Después creamos otro evento en SelectedIndexChange (que saldrá cuando el usuario haya seleccionado un nombre de la lista)
Y simplemente hacemos el call...
Call carga_datos(cint(combobox.column(0)))
Seguramente habrá algún fallo en el código, pero bueno, más o menos lo que tienes que hacer es esto.