Imprimir etiquetas filtradas según condición definida por el usuario

Tengo una tabla "T_Socios" con los datos de las personas y necesito imprimir etiquetas para enviar cartas.-

Detalle construcción Tabla

La idea es diseñar una etiqueta genérica con los campos, "nombre, "Apellidos", "Domicilio", etc.

Y poder imprimirlas en función de los criterios "HOMBRES, MUJERES", "ADULTOS, "MENORES", ETC. "Población" etc, previamente seleccionados por el usuario en cuadro de lista Usando el método Select, "CASE".

Los he intentado una y mil veces, y no consigo que funcione.

¿Alguna sugerencia?

2 Respuestas

Respuesta
1

Es muy sencillo. Como actualmente no tengo ninguna tabla con direcciones, ni fechas de nacimientos, uso la tabla Clientes.

Puedes ver 4 mujeres, 2 hombres, de los cuales uno es menor( he supuesto que son los que tienen menos de 18 años. Hay 5 mayores y un menor.

Si tengo el cuadro combinado, donde voy a elegir

Cuando lo selecciono

He tenido que "apretar" las etiquetas para que se vean todas.

Si selecciono

Sólo me mostrará uno

Si hubiera seleccionado SociosMujeres

El combinado se llama ElegirTipo y en sus propiedades-eventos-Después de actualizar le tengo puesto

Private Sub ElegirTipo_AfterUpdate()
Select Case ElegirTipo
Case Is = "Socios Adultos"
DoCmd.OpenReport "clientes", acPreview, , "DateDiff(""yyyy"", fechanac, Date()) > 18"
Case Is = "socios menores"
DoCmd.OpenReport "clientes", acPreview, , "datediff(""yyyy"",fechanac,Date())<=18"
Case Is = "socios mujeres"
DoCmd.OpenReport "clientes", acPreview, , "sexo=""Hembra"""
End Select
End Sub

Te dejo como tarea los socioshombres y Todos(pista...suprimir los criterios)

¡Gracias! , me pongo a ello

Bueno días Julián: FELICES FIESTAS

¿Qué tendría que implementar al código para sacar el informe filtrado por más de un criterio?

Necesito imprimir las etiquetas de socios que sean "Adultos " y que su forma de pago sea  "En  Secretaria"

El problema es que no acierto con el operador And y me da error 13 en tiempo de ejecución, "No coinciden los tipos"

Le tengo puesto este código

Case Is = "Adulto Secretaria"
DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "DateDiff(""yyyy"", fecha_nac, Date()) > 18" And "forma de pago=""En Secretaria"""

Por favor, iluminame el camino

Suponiendo que el origen del informe sea, por ejemplo, la tabla Socios puedes poner lo de Docmd... como

DoCmd.OpenReport "[Etiquetas T_Socios]", acPreview, , "DateDiff(""yyyy"", fecha_nac, Date()) > 18 And [forma de pago]=""En Secretaria"""

El inconveniente de poner a los campos nombre separados es que luego en código VB tienes que estar encerrándolo entre corchetes o comillas. Por ejemplo T_Socios se considera cadena única pero Etiquetas T_Socios son dos cadenas por eso hay que encerrarlo, lo mismo con Forma de pago que son tres cadenas.

Lo he probado así y no funciona

Si encerramos entre corchetes el nombre del informe, no lo reconoce.

he probado a quitar los corchetes y tampoco funciona

Con este código me saca los socios adultos perfectamente

Case Is = "Socios Adultos"
DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "DateDiff(""yyyy"", fecha_nac, Date()) > 18"

ahora habría que implantarle lo necesario para que me saque además el otro criterio, teniendo en cuenta que el campo de la tabla es  un cuadro combinado y se llama "Forma_Pago" 

Y este código me saca perfectamente los que pagan en Secretaria

Case Is = "Pagos Secretaria"
DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "Forma_Pago=""En Secretaría"""

Ahora la cuestión es conseguir que me saque los adultos que pagan en Secretaria.

La mare que pario al chino jajajaja

José María, tienes toda la razón. Vamos a echarle la culpa al Alzheimer, al Covid, a una explosión de una supernova en la constelación de Magallanes, etc. Si antes te digo que al ser nombres separados, en VB hay que encerrarlos entre comillas ó corchetes, antes encierro el nombre con comillas y con corchetes a la vez. Mira, si tengo el formulario

Donde puedes ver que hay sólo tres adultos( me parece muy arriesgado llamar a una mujer ""ADULTA"", ya que ellas no cumplen años) que pagan por secretaría. Si pulso el botón(sé que lo tienes de otra forma, pero es suficiente para la instrucción

La instrucción es

Private Sub Comando9_Click()
DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "fix((Date()-fechanacimiento)/365.24)>=18 and formapago=""En Secretaria"""
End Sub

Te aconsejaría que usaras la expresión Fix.... para calcular las edades. La función DateDiff resta "a huevo" los años, pero si has nacido después de la fecha del sistema te falsea en un año el resultado. Por ejemplo

Pero esa persona todavía no tiene los 20. En este caso es poca la diferencia, pero imagínate que ha nacido en Noviembre y en ese momento estás en Febrero, durante 9 meses le cobrarías como adulto.

Julián,  así tampoco me funciona, y me explico:

La primera parte de  la instrucción funciona bien, es decir, si le pido los socios adultos me los saca  bien. con este código: DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "fix((Date()-fecha_nac)/365.24)>=18"

Pero si completo la instrucción para que me saque también el criterio "Forma_Pago=""En Secretaria""""

Me saca esto

Con este código, me saca el informe vacío

DoCmd.OpenReport "Etiquetas T_Socios", acPreview, , "fix((Date()-fecha_nac)/365.24)>=18 and forma_pago=""En Secretaria"""

Algo falla y no se que es

Ok, ya lo tengo

Una tilde en el valor de campo  "En Secretaría"

Perfecto Julián, eres un crack amigo

Personalmente nunca le pongo acento a nada. Así, luego no tengo que estar pensando ¿Le habré puesto acento? ¿No se lo he puesto? Ya lo pondré correctamente en las etiquetas, que es, digamos, lo que se va a mostrar "bonito".

De todas formas, si quieres, repito, si quieres mándame una copia vacía, repito vacía, de la tabla, el formulario y el informe, para echarle un vistazo y te digo.

Mi correo es [email protected]

Respuesta
1

Si no estoy mal su pregunta se refiere es sobre un cuadro de lista, pero le han respondido es con base en un cuadro combinado, en este caso se tendría que evaluar si es un de selección simple o extendida. Si es de selección simple, sirve el ejemplo que le dan, solo tendría hacer un pequeño cambio, pero si lo que quiere es seleccionar varios criterios a la vez, selección extendida, es decir, hacer etiquetas para "SOCIOS ADULTOS" y "SOCIOS HOMBRE", o "SOCIOS ADULTOS" ó "SOCIOS HOMBRES" ya no le serviría la respuesta que le dan. En este caso tendría que recorrer los ítems seleccionados y armar los AND o OR de acuerdo con sus necesidades. Si me envía su tabla a [email protected] con gusto le colaboro.

Aclaro si es Selección Ninguna o Selección Simple (con un ítem) sirve el ejemplo que le dan con una pequeña modificación, pero si es Selección Simple (con más de un ítem) o Selección Extendida, ya la selección es un poco más laboriosa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas