Datos enlistados de 1 columna colocarlos en un campo separados por comas entre sí. (En un campo Memo de otra tabla)

Necesito poner, por medio de una macro, los datos enlistados de una columna separados por una coma entre sí.

Ej columna nombres de una tabla

Carlos

Juana

Pedro

Walter

Resultando: Carlos, Juana, Pedro, Walter.

En un campo Memo de otra tabla.

2 Respuestas

Respuesta
2

Noa: Mira éste ejemplo que tengo en Mediafire

http://www.mediafire.com/file/23ie71qz6mc15lf/ConcatenaTextoFilas.rar 

Dentro del Ejemplo, verás el Procedimiento siguiente.

Private Sub BtnCadenaTo_Click()
'Código Jacinto Trillo Jareño, para probar una respuesta que dí en Todoexpertos en Fecha 14/01/2017, y otra el 16/01/2017
'http://www.todoexpertos.com/preguntas/7ji3dl7wet3ipxjc/unir-varios-campos-para-crear-uno-solo-para-envio-de-emails-multiples
'http://www.todoexpertos.com/preguntas/7jnwmnhhgmek7sw5/seleccionar-todos-los-correos-de-un-formulario-de-clientes?selectedanswerid=7jnxges76v69ok9x&nid=9ou9rtugggoq9t6fgstplg4qh3w6dhkqgcrprg4ohovpntmi9su9xx6fabr3&utm_source=todoexpertos&utm_medium=EmailNotification&utm_campaign=ExpertAnswer_AskerMessageAdded
Dim StrSQL As String, LaListaEMails As String
Dim NumMails As Integer
Dim Rst As DAO.Recordset
LaListaEMails = ""
Me.TxtTo = ""
NumMails = 0
Me.TxtNumMails = 0
StrSQL = "SELECT Correo, Enviar FROM TblClientes WHERE Enviar = True"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
If Not Rst.EOF And Not Rst.BOF Then
        Rst.MoveLast
        Rst.MoveFirst
        Do While Not Rst.EOF
                LaListaEMails = LaListaEMails & Trim(Rst!Correo) & ";"
                NumMails = NumMails + 1
                Rst.MoveNext
        Loop
        LaListaEMails = Left(LaListaEMails, Len(LaListaEMails) - 1)
        Me.TxtTo = LaListaEMails
        Me.TxtNumMails = NumMails
Else
        MsgBox "Este Recordset está vacío", vbCritical, "RECORDSET SIN DATOS"
End If
Rst.Close
Set Rst = Nothing
End Sub

También mira si quieres los antecedentes de dos preguntas que respondí por el mes de Enero y cuyo enlace tienes en las primeras líneas del Procedimiento. Un saludo >> Jacinto

¡muchas Gracias! 

Es precisamente lo que quería.  Ahora debo adaptarlo a mi necesidad que es dentro de lo que denominaste CodLote agruparlos según un criterio y así agrupado según ese criterio colocarlo en el campo TextoConcatenado siguiendo tu ejemplo.

Es decir alumnos de matemáticas: Carlos, Pedro, Juan.

Alumnos de Física: María, Marcelo, Carlos etc

Es decir

Agrupado según CodLote y en segundo lugar Alumnos de....

Y así agrupados colocarlos en el campo TextoConcatenado

Muchas gracias.

Noa: Me queda la duda de si realmente has resuelto el problema.

En cualquier caso, lo que comentas de Asignatura >> Alumnos, sería similar a unir teléfonos de un Cliente que tenga varios.

Lo unico es que dependiendo de como tengas la información será una metodología u otra.

Con esa idea creo podrás hacerlo, pero al desconocer como tienes los datos, no acertaría con cualquier apunte. Mi sugerencia es que dependiendo de lo anterior, generes otra pregunta porque veo que la respuesta de Icue, también deberíade haber resuelto tu problema. Mis saludos >> Jacinto

Respuesta
1

Supongamos que estás en un formulario y que el cuadro de texto de llama Nombre. Para ver como funciona, añade un cuadro de texto, que supongamos que se llama Texto5. En un evento cualquiera, por ejemplo, al hacer clic de un botón pon

Dim a As String, i As Byte
a = ""

Docmd.gotorecord,,acfirst
For i = 1 To Form.Recordset.RecordCount
a = "" & a & "" & "," & [nombre]
DoCmd.GoToRecord , , acNext
Next

Texto5 = Mid(a, 2, Len(a) - 1)

Como le pone una coma al principio al final le digo que "corte" la cadena.

Una vez hayas visto como funciona ya puedes usar lo de

docmd.runsql"insert into....

o lo de

docmd.runsql"update tabla set....

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas