Access - Combo con opción de seleccionar todos o ninguno

Tengo un formulario que recoge una consulta. En este formulario tengo un par de combos que me generan la consulta. Me gustaría saber cómo puedo insertar un Todos para que me seleccione todas las opciones e insertar a su vez un Ninguno para que al generar la consulta no me coja ningún dato del combo. De momento, dado mis pocos conocimientos, insertando en la tabla que recoge el combo he añadido un * que me recoge todas las opciones y un Es Nulo que me desactiva el combo pero seguro que habrá alguna forma de cambiar el * por un Todos y el Es Nulo por Ninguno.

1 respuesta

Respuesta
1

Todo depende de cuantos valores tenga el combinado, y de donde venga el origen de la fila del combinado. Si son pocos podrías optar por poner como Tipo Origen de la fila como Lista de Valores, y en lista de valores poner los que quieras más Todo y Ninguno. Y en el evento Después de actualizar poner algo así como

select case nombredelcombinado

case is="Yo que se"

docmd........

case is.....

Case is="Todos"

docmd.....

case is="ninguno"

docmd....

end select

En caso de que fueran muchos podrías intentar poner en la tabla o consulta origen del combinado los valores Todo Y Ninguno.

Si puedes decir como está construido el combinado quizá se podría concretar algo más.

Intentaré explicarme mejor. He generado una consulta que la lanzo a través de un formulario. Esta consulta me da la opción de filtrar hasta por tres clientes. Para ello he insertado tres combos, Cliente1, Cliente2 y Cliente3 que recoge los registros de la tabla Clientes. De esta forma puedo listar la tabla Proyectos y que me filtre por el cliente que quiera. El problema viene cuando quiero seleccionar tan solo un cliente, al dejar los otros dos combos, o si escogiera dos el último combo en blanco, sin escoger ninguna opción, me lo reconoce como si seleccionara todos.  La solución chapucera que he encontrado es que el usuario escoja los tres clientes que quiera filtrar y si tan solo quiere uno o dos, en los combos restantes escoja Es Nulo, así los otros combos no filtran por nada. De la misma forma, si escoge en el combo el registro de esta tabla de Clientes que he nombrado como  * me lo reconozca como todos.

Hasta aquí tengo resuelto el problema, pero me gustaría poder cambiar el * por un Todos para que me lo filtre por todos los registros de la tabla Clientes y si selecciona Descartar que me lo recoja como un Es Nulo.

Una opción, pero no sé cómo, y que me has indicado es realizar en el dichos combos y después de actualizar el Select case …. if case Clientes1 = “Todos” then select

¿Me podrías ayudar a completar el código? Si conoces otra mejor que esta tan rebuscada no dudes en decírmela, gracias.

En tu caso, con los tres combos, yo pondría un botón y en el evento Al hacer clic pondría

Dim clienteA As String
Dim ClienteB As String
Dim ClienteC As String
Dim vLargo As Integer
Dim miFiltro As String
clienteA = Nz(Me.NombreCombo1.Value, "")
ClienteB = Nz(Me.NombreCombo2.Value, "")
ClienteC = Nz(Me.NombreCombo3.Value, "")
miFiltro = ""
If clienteA <> "" Then
miFiltro = "AND [nombrecliente]='" & clienteA & "'"
End If
If ClienteB <> "" Then
miFiltro = miFiltro & " AND [nombrecliente]='" & ClienteB & "'"
End If
If ClienteC <> "" Then
miFiltro = miFiltro & " AND [NombreCliente]='" & ClienteC & "'"
End If
vLargo = Len(miFiltro)
If vLargo > 0 Then
miFiltro = Right(miFiltro, vLargo - 4)
End If
Me.Filter = miFiltro
Me.FilterOn = True

Lógicamente tendrás que cambiar NombreCombo1, 2 y 3 por los nombres de tus combinados y suponiendo que el campo a filtrar sea NombreCliente.

No sé de quien es esta instrucción, desde luego mía no es. Al Cesar lo que es del Cesar.

Para lo de Todo o Ninguno casi es mejor que pongas otro, con lista de valores y en el evento Después de actualizar poner

If nombredelcombinado="Todos"

form.recordsource="select * from clientes"

else

lo que tenga que hacer

end if

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas