Concatenar registros

Un experto de aquí contestó hace tiempo a una pegunta similar. Lo que quiero es concatenar los registros del campo "email" separados por ";".
Este es el código que dio:
Private Sub Comando14_Click()
Dim r As Recordset
  bu = FreeFile
Open "fichero.txt" For Output As bu
   Set r = CurrentDb.OpenRecordset("select * from Email", dbOpenDynaset)
   If r.RecordCount > 0 Then
      r.MoveLast
      r.MoveFirst
      For a = 1 To r.RecordCount
         Print #bu, r!email & ";";
         r.MoveNext
      Next
   End If
Close bu
End Sub
Cuando le doy al botón me sale el siguiente error: "Se ha producido el error 3001 en tiempo de ejecución: Argumento no válido".
Le doy a "depurar" y marca en amarillo la siguiente línea:
Set r = CurrentDb.OpenRecordset("select * from Email", dbOpenDynaset)
¿Alguien me puede ayudar a solucionar el probalema?

1 respuesta

Respuesta
1
Dime el nombre de la tabla y el campo donde están los email y te hago el código para que te lo ponga todo en un nuevo email
Nombre de la tabla: USUARIOS
Campo: Email
Muchísimas gracias, dayvitt!
Dim rst As DAO.Recordset
 Dim strSql As String
 Dim strSep As String
 Dim strRes As String
 Dim NomCamp As String
 Dim NomTaula As String
 Dim Separador As String
 Dim DQ As String
 NomCamp = "[Email]"
 NomTaula = "USUARIOS"
 Separador = "; "
 DQ = """"
 If Nz(NomCamp, "") <> "" Then
    If Nz(NomTaula, "") <> "" Then
        strSql = "SELECT " & NomCamp & " FROM " & NomTaula & ";"
        strSep = Nz(Separador, "")
        Mails.Value = strSql
        Set rst = CurrentDb.OpenRecordset(strSql)
        With rst
            If (Not .EOF) And (Not .BOF) Then
                Do While Not .EOF
                    If IsNull(.Fields(0)) = False Then
                        strRes = strRes & .Fields(0)
                        If Not .EOF Then
                            strRes = strRes & strSep
                        End If
                    End If
                    .MoveNext
                Loop
            End If
        End With
    End If
 End If
 strRes = Left(strRes, Len(strRes) - 2)
DoCmd. SendObject acSendNoObject,,,,, strRes
Me sigue dando el error: Error de compilación: No se ha definido el tipo definido por el usuario.
¿Qué será?
¿Dónde te marca el error?
Me lo da al hacer click en el botón y marca en amarillo esto: Private Sub Comando82_Click() y en gris esto: rst As DAO. Recordset
te falta el Dim delante
No, no te lo copié, pero no me falta: Está así:
Dim rst As DAO.Recordset
:_(
Vale, quitale la linea Mails.Value = strSql
Me sigue marcando el error en este fragmento de línea: rst As DAO. Recordset
Que error te da?  Y pegame todo el codigo del Private Sub Comando14_Click()
ME da el error:
"Error de compilación:
No se ha definido el tipo definido por el usuario."
Private Sub Comando82_Click()
Dim rst As DAO.Recordset
 Dim strSql As String
 Dim strSep As String
 Dim strRes As String
 Dim NomCamp As String
 Dim NomTaula As String
 Dim Separador As String
 Dim DQ As String
 NomCamp = "[Email]"
 NomTaula = "USUARIOS"
 Separador = "; "
 DQ = """"
 If Nz(NomCamp, "") <> "" Then
    If Nz(NomTaula, "") <> "" Then
        strSql = "SELECT " & NomCamp & " FROM " & NomTaula & ";"
        strSep = Nz(Separador, "")
                Set rst = CurrentDb.OpenRecordset(strSql)
        With rst
            If (Not .EOF) And (Not .BOF) Then
                Do While Not .EOF
                    If IsNull(.Fields(0)) = False Then
                        strRes = strRes & .Fields(0)
                        If Not .EOF Then
                            strRes = strRes & strSep
                        End If
                    End If
                    .MoveNext
                Loop
            End If
        End With
    End If
 End If
 strRes = Left(strRes, Len(strRes) - 2)
 DoCmd.SendObject acSendNoObject, , , , , strRes
End Sub
Ok, vete a Herramientas ->Referencias y tíldale a Microsoft DAO 3. 6
Si no es Herramientas ->referencias, es proyecto -> referencias
Ahora sí!
De verdad que te agradezco muchísimo las molestias que te has tomado.
El viernes lo probaré en el trabajo!
Una vez más, mil gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas