¿Cómo evitar que se repitan textos en un cuadro de texto a partir de la selección desde un cuadro combinado?

Tengo un formulario en donde realizo la selección de nombres en un cuadro combinado. A partir de esa selección me agrupa los correos electrónicos de cada nombre que voy seleccionando. El problema que si ya fue seleccionado un nombre, me sigue agrupando el correo en el campo destinado para almacenar las direcciones de correos electrónicos.

Lo que necesito es encontrar la forma de que si selecciono un nombre que ya fue previamente seleccionado, no me permita seleccionarlo y me permita continuar con la selección hasta finalizar y así obtener todos los correos sin que estos se hayan repetido.

2 Respuestas

Respuesta
2

Valeria, quiero dejar por sentado que no sé como están hechas las tablas y el formulario. Por eso voy a suponer cosas.

Supongamos que tienes una tabla Clientes con, entre otros, los campos que ves en la imagen.

Supongamos que tienes otra tabla, Usar con, entre otros los campos

En el campo Union es donde se van a unir los email de los diferentes clientes. Y supongamos que con esa tabla haces un formulario como el de la imagen

Al cuadro de texto que ves como independiente, en sus propiedades-formato le he puesto como visible=No, y en sus propiedades-otras-nombre le he puesto email. El combinado Cliente tiene como origen de la fila el campo Cliente de la tabla Clientes. El código del formulario es

Así, cuando en el combinado elijas un cliente, te pasa al cuadro Union, el email de ese cliente. Luego vuelves a elegir otro cliente en el combiando y te pasa su email al cuadro union. Si por error eligieras un cliente repetido, te aparece un mensaje advirtiéndote que ese email ya está "añadido" y el cursor se vuelve al combinado.

En la imagen he elegido primero a Antonio, luego a Thomas. Como te decía si por error vuelvo a elegir a Antonio

te aparece

Y al aceptar el cursor se vuelve a Cliente

Icue Gonzalez muchas gracias por tu tiempo. No tengo mucha experiencia en esto así que te voy a molestar con una pregunta. Aclaro que tu explicación se parece mucho a lo que tenia ya diseñado.

Pero me resulta confuso porque en algunos casos utilizaste la palabra cliente pero primero con minúscula y luego mayúscula al igual que idemail. Ya que al momento de reemplazar en el código por los nombres que tengo en mi formulario me resuelta algo confuso.

Tienes toda la razón, pero da exactamente igual las minúsculas que las mayúsculas. Si bien, es cierto, siempre aconsejo poner como nombre a los campos, o controles una letra, normalmente la primera en mayúsculas. Esto tiene la ventaja de que cuando estás haciendo una instrucción en el editor de VB si la escribes toda en minúsculas, cuando pases el cursor a otra línea, si está bien redactada te pone las mayúsculas en su sitio. ¡Ay de ti si las sigue dejando en minúsculas!

Por ejemplo, yo siempres escribo

Docmd. Openreport"clientes", acpreview,,,,, si al terminar no me lo pone como

DoCmd. OpenReport"clientes", AcPreview... malo, es que algo no está bien puesto.

Lo que hice fue hacer un modelo casi exacto del ejemplo que muy amablemente te molestaste en poner. pero...

En lugar de usar una tabla clientes utilice la mía que se llama usuarios. Los campos de la misma son exacto a la tuya solo que los campos se llaman Login (para Cliente) y los campos de Email son exactos.

Por otro lado hice una tabla igual a la tuya que la llame de la misma forma e hice el formulario con los mismos campos y cuadros de texto. El código me quedo así.

Private Sub Cliente_AfterUpdate()
email = DLookup("Email", "usuarios", "Login='" & Me.Cliente & " ' ")
DoCmd.RunCommand acCmdSaveRecord
If DCount("Union", "Usar", "Union Like""*"" &[email] & ""*"" and Idemail=" & Me.Idemail & "") >= 1 Then
MsgBox "Ese Mail ya esta puesto", vbOKOnly, "No te enteras"
DoCmd.CancelEvent
Else
Union = "" & [email] & "" & "," & Union
Union.Requery
End If
End Sub

Lo ejecuto en el formulario y lo único que coloca en el campo Union es una coma ", "... en el cuadro de texto llamado "email" tampoco recopila nada... no puedo encontrar el error.

Creo que lo mejor es que si quieres, repito, si quieres, mándame la tabla vacía, o si le pones unos cuantos registros inventados mejor, así no los tengo que escribir yo, a [email protected] y te mando un ejemplo con tus campos. Si lo haces, en el asunto del mensaje pon tu alias Valeria, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Te recomiendo utilizar el lugar de un cuadro combinado un cuadro de lista y haces uso de la propiedad itemselected y recorres el cuadro de lista con la instrucción:

Dim varPosicion AS Variant

   If Me.lstFracciones.ItemsSelected.Count = 0 Then

        MostrarMensaje "Debe seleccionar una o más correos",vbInformation,"Cuidado"
        Exit Sub
    End If

For Each varPosicion In lstCudrolista.ItemsSelected

 ..... ' Aquí va el código para asignar el correo a cada destinatario

varPosicion=varPosicion+1

Next varPosicion

Al cuadro de lista en Propiedades ... Selección Multiple seleccionas "Simple"

LstCuadrolista es el nombre que haya dado al cuadro de lista puedes asignar el que tú quieras pero debes tener cuidado de reemplazarlo en la instrucción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas