Crear cuadro combinado que se autodespliegue al insertar datos
Es una pregunta para Sveinbjorn El Rojo
Hola
Tengo un combo en el formulario basado en el campo "editorial".
Me gustaría que cuando comienzo a escribir en el recuadro del combo se me autodesplegara el desplegable, la lista del combo, con solo aquellos valores que comienzan igual que lo que escribo y que aparecieran por orden alfabético.
Es decir, si en el recuadro del combo comienzo a escribir "v..." debería autodesplegarse en el combo solo los valores que coinciden como "vergara", "valdemar", etc.
Formulario: Biblioteca_Personal
Control: editorial
Combo: cbo_editorial
Tabla:TLibros
1 respuesta
Para autodesplegarlo, en el evento "Al cambiar" del combo, ponle este código:
Me. Editorial. Dropdown
Para que te añada los nuevos elementos depende de cómo lo tengas construido:
1º/ Si los datos los obtienes de la propia tabla, lo único que has de hacer es asegurarte de que tengas la propiedad "Limitar a la lista" del cuadro combinado en No
2º/ Si los datos los obtienes de otra tabla, tienes que usar el evento "Al no estar en la lista". Suponiendo que las editoriales las guardas en una tabla TEditoriales con dos campos: IDEditorial y Editorial, sería así:
Private Sub Editorial_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue
CurrentDb.Execute "INSERT INTO TEditoriales(Editorial) VALUES ('" & NewData & "')"
Me.Editorial= DMax("IDEditorial", "TEditoriales")
Me. OtroCampo. SetFocus
Me. Editorial. Requery
End Sub
3º/ Si los datos los obtienes de una lista de valores que metes a mano, en tiempo de ejecución no lo puedes hacer. Necesitarías abrir el formulario en vista diseño, modificarle la propiedad "Origen de la lista" y guardar los cambios
Hola
Uso la opción 2.
Todo funciona correctamente salvo el tema del autodesplegable al escribir.
Con .dropdown se me abre el desplegable cuando comienzo a escribir...
pero lo que quería es que se me abriera el desplegable con solo los valores que coinciden con lo que escribo y no con todos como ocurre ahora.
Es decir, si en el recuadro del combo comienzo a escribir "v" debería autodesplegarse en el combo solo los valores que coinciden
como "vergara", "valdemar", etc. y no todos los valores del combo.
Ahora mismo si escribo "v" aparecen al autodesplegarse el combo:
alba
planeta
valdemar
valencia
vergara
y debería, si escribo "v" autodesplegarse el combo mostrando solo valores coincidentes con "v" como:
valdemar
valencia
vergara
y si sigo escribiendo "val" en el desplegable solo debería aparecer:
valdemar
valencia
De antemano muchas gracias por la ayuda
Ponle esta línea antes del .dropdown:
Me.Editorial.RowSource = "SELECT DISCTINCT Editorial FROM TuTabla WHERE Editorial LIKE '" & Me.Editorial.Text & "*' Order BY Editorial"
Hola
En el evento "al cambiar" tengo:
Me.Editorial.dropdown
Lo de...
Me.Editorial.RowSource = "Select ...
¿En qué evento debo ponerlo?
Gracias por la ayuda
Si pongo la línea que me comenta... Me.Editorial.RowSource = "Select ... "
en el evento "al cambiar" no funciona bien. ¿Debería ir en otro evento?
Gracias
La línea esa se la tienes que poner en el evento al cambiar, antes de la otra. Obviamente con los nombres que tú tengas, no un simple copia y pega de la mía
Entiendo que no es un simple copia y pega lo que tengo que hacer je je... hasta ahí llego, pero cuando lo pongo con mis nombres...
lo de me.Editorial.Rowsource = "select... en el evento "al cambiar"
y escribo "v" sin comillas claro, en el recuadro del combo, no se me autodespliegan los valores que empiezan por "v" y si me paso a otro registro que ya tiene datos en el recuadro del combo y quiero desplegar el combo no me aparece el listado de valores, no se muestran los valores en el desplegable, tan solo se muestra uno. En definitiva al añadir esta línea no funciona correctamente el combo.
Si lo puedes mirar o mandarme un ejemplo de cómo lo tienes tú, te lo agradecería porque siguiendo lo que me indicas, no me funciona bien el combo.
Gracias por la ayuda
Yo no lo tengo de ninguna manera, te estoy dando ideas sin probarlo, porque me parece complicarse demasiado la vida...
Añade en el evento "Al activar registro" del formulario esta linea:
me.Editorial.Rowsource = ...
Y donde van los puntos suspensivos por lo que tenías en un principio, o la misma SQL sin el WHERE, a ver si así te termina de ir
hola
Lo tengo de la siguiente forma:
en diseño, en el origen de la fila del combo, cbo_editorial tengo:
SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],"")<>"" ORDER BY Teditorial.editorial;
y ahora en el evento "al cambiar" he puesto para que solo se despliegue en el combo los valores que coinciden con lo que escribo:
Me.cbo_editorial.RowSource = "SELECT DISCTINCT Editorial FROM Teditorial WHERE editorial LIKE '" & Me.cbo_editorial.Text & "*' Order BY editorial"
Hasta aquí todo bien... el origen del combo son las editoriales sin duplicados y sin "blancos" (o sea registros que no tienen editorial) y además cuando escribo en el recuadro del combo, si escribo "va" se me despliega el combo solo con los valores que comienzan con "va" gracias a lo que he añadido en el evento "al cambiar".
El problema ahora es que cuando quiero abrir ahora el combo solo me muestra un valor, porque el último rowsource que he dejado es:
Me.cbo_editorial.RowSource = "SELECT DISCTINCT Editorial FROM Teditorial WHERE editorial LIKE '" & Me.cbo_editorial.Text & "*' Order BY editorial"
Tendría que poner en algún evento para poder volver a ver todo el listado de valores del combo un nuevo rowsource.
He puesto "al recibir el enfoque" en el combo esto, para poder volve a ver todo el listado del combo sin duplicados y sin "blancos" (registros sin editorial)
Me.cbo_editorial.RowSource = "SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],"")<>"" ORDER BY Teditorial.editorial;
pero me dice que falta el operador y error de sintaxis.
Podrías indicarme qué debo poner para volver a ver todo el listado de valores del combo.
Un saludo y gracias por tu ayuda y tu paciencia
Me.cbo_editorial.RowSource = "SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],'')<>'' ORDER BY Teditorial.editorial;"
o
Me.cbo_editorial.RowSource = "SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],"""")<>"""" ORDER BY Teditorial.editorial;"
Ahora ya funciona todo perfectamente.
Me ha servido la 2º opción y lo he puesto en al recibir enfoque en el combo:
Me.cbo_editorial.RowSource = "SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],"""")<>"""" ORDER BY Teditorial.editorial;"
sin embargo en diseño en origen de la fila sigo poniendo esto:
SELECT DISTINCT Teditorial.editorial FROM Teditorial WHERE Nz([editorial],"")<>"" ORDER BY Teditorial.editorial;
Como ves, en el origen de la fila el rowsource tiene 2 comillas dobles y en el rowsource que he puesto en el evento "al recibir enfoque" del combo, aquí tiene 4 comillas dobles.
Desde mi ignorancia, disculpa ¿no debería ser el mismo código tanto en origen de la fila del combo como en el evento al recibir enfoque del combo?
Sin embargo así todo funciona bien, más que nada te lo pregunto por entenderlo si no es mucha molestia y con esto cierro la pregunta.
Y es el mismo, pero en VBA para poner una comilla doble la tienes que duplicar o usar una comilla simple, en vez de la doble.
Eso es porque la comilla doble se usa para delimitar cadenas de texto.
- Compartir respuesta