Error 3061:Pocos Parámetros. Se esperaba 2.

 Estaba terminando de adaptar el ejemplo que me encontré de neckkito, pero me dejo de funcionar luego de colocar el siguiente criterio en la consulta: Entre [Forms]![frmBusqueda]![txt_Fecha_Ini] Y [Forms]![frmBusqueda]![txt_Fecha_Fin], esto para que me filtrara los registros con los fechas indicadas pero  me muestra el siguiente mensaje:

Si le borro ese criterio vuelve a funcionar correctamente y no le encuentro la solución a ese mensaje que me muestra.

código del botón:

Private Sub btn_enviar_correos_Click()

On Error GoTo sol_err
        'Definimos las variables
    Dim mailA As String
    Dim mailCC As String
    Dim mailCCO As String
    Dim elAsunto As String, elMsg As String
       'Pedimos al usuario que especifique el asunto
    elAsunto = "Notificación de Resultados"
        'Si no se especifica nada los valores se convierten a cadena de texto vacía
    If IsNull(elAsunto) Then elAsunto = ""
    If IsNull(elMsg) Then elMsg = ""

        'Creamos el recordset
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("Q_envio_correos")
        'Nos movemos al primer registro
    rst.MoveFirst
        'Iniciamos el proceso
    Do Until rst.EOF
            'Creamos una instancia de Outlook
        Dim Olk As Outlook.Application
        Set Olk = CreateObject("Outlook.Application")
            'Creamos un nuevo mensaje de Outlook
        Dim OlkMsg As Outlook.MailItem
        Set OlkMsg = Olk.CreateItem(olMailItem)
            'Creamos la información del mail
        With OlkMsg
                'Definimos los elementos del mail
            Dim OlkDestinatario As Outlook.Recipient
            Dim OlkAdjunto As Outlook.Attachment
                'Inicializamos los elementos del mail
            Set OlkDestinatario = .Recipients.Add(rst.Fields("Correo_electronico1").Value)
            OlkDestinatario.Type = olTo

'Añadimos los elementos Asunto y Mensaje
.Subject = elAsunto
If rst("Reporte_Recibido") = True And rst("DVD_Recibido") = True Then
  .Body = " Estimado (a):" & " " & rst("Nombre_Completo") & ", " & vbCrLf & " " & vbCrLf & " " & vbCrLf & "" & "  Le informamos que hemos recibido los resultados  que se realizó ." & vbCrLf & " " & vbCrLf & vbCrLf & " " & vbCrLf & " Para cualquier consulta al respecto, por favor contactarse con:" & vbCrLf & "" & vbCrLf & " " & vbCrLf & "xxxxxxxx" & vbCrLf & "cccccccccc" & vbCrLf & "Tel: 2550t1842" & vbCrLf & "Horario: Lunes a Viernes de 3:30pm a 10:00pm." & vbCrLf & " " & vbCrLf & " " & vbCrLf & "" & vbCrLf & "Este correo electrónico informativo ha sido generado automáticamente, por favor no responder."

ElseIf rst("Reporte_Recibido") = True And rst("DVD_Recibido") = False Then
   .Body = " Estimado (a):" & " " & rst("Nombre_Completo") & ", " & vbCrLf & " " & vbCrLf & " " & vbCrLf & "" & "  Le informamos que hemos recibido los resultados  que se realizó ." & vbCrLf & " " & vbCrLf & vbCrLf & " " & vbCrLf & " Para cualquier consulta al respecto, por favor contactarse con:" & vbCrLf & "" & vbCrLf & " " & vbCrLf & "xxxxxxxx" & vbCrLf & "cccccccccc" & vbCrLf & "Tel: 2550t1842" & vbCrLf & "Horario: Lunes a Viernes de 3:30pm a 10:00pm." & vbCrLf & " " & vbCrLf & " " & vbCrLf & "" & vbCrLf & "Este correo electrónico informativo ha sido generado automáticamente, por favor no responder."
End If
'Enviamos el mail
.Send
        End With
            'Nos movemos al siguiente registro
        rst.MoveNext
    Loop
        'Lanzamos un mensaje de OK
    MsgBox "El mensaje masivo se ha enviado correctamente", vbInformation, "CORRECTO"

        'Cerramos conexiones y liberamos memoria
    rst.Close
    Set rst = Nothing
        'Eliminamos la instancia
    Set Olk = Nothing
    Set OlkMsg = Nothing
    Set OlkDestinatario = Nothing
    Set OlkAdjunto = Nothing
Salida:
    Exit Sub
sol_err:
    MsgBox Err.Number & ": " & Err.Description
    Resume Salida

End Sub

Si me pueden ayudar se los agradezco

1 respuesta

Respuesta
2

A priori, y dado que en el código intuyo que solo te puede fallar con ese error en la linea Set rst = CurrentDb.OpenRecordset("Q_envio_correos"), supongo que tienes mal escrito en la consulta (en el criterio que añades) o el nombre del formulario, o los de los cuadros de textos donde pones las fechas, o bien, que no hayas escrito nada en esos cuadros de texto...

Hola gracias

Revisé lo que me indicas pero están correctos. 

Borré el criterio y lo volví a crear con el Generador de expresiones, pero perdiste el mensaje con el error 

*era persiste el error 

Si ejecutas la consulta directamente, ¿funciona o da error?

Funciona si coloco las fechas en el formulario.

Cuando no colocó las fechas en el formulario me solicita las fechas, las colocó y también funciona de esta forma la consulta

Tienes dos opciones:

1º/ La complicada, definir en el código los parámetros y luego abrir el recordset sobre la consulta tal como lo tienes ahora

1º/ La fácil: quitar los criterios de la consulta y pasarlos en el momento de abrir el recordset.

Te comento cómo sería la segunda:

en primer lugar, borra los criterios de la consulta. Luego modificas la linea Set rst = CurrentDb.OpenRecordset("Q_envio_correos") y la cambias por ésta:

Set rst = CurrentDb.OpenRecordset("SELECT * FROM Q_envio_correos WHERE CampoFecha Between #" & Format(Me.txt_Fecha_Ini,"mm/dd/yyyy") & "# AND #" & Format(Me.txt_Fecha_Fin,"mm/dd/yyyy") & "#")

Si txt_Fecha_Ini y txt_Fecha_Fin están en el mismo formulario donde ejecutas el código. Si están en otro formulario (que tiene que estar abierto), sería:

Set rst = CurrentDb.OpenRecordset("SELECT * FROM Q_envio_correos WHERE CampoFecha Between #" & Format(Forms("nombreFormulario").txt_Fecha_Ini,"mm/dd/yyyy") & "# AND #" & Format(Forms("nombreFormulario").txt_Fecha_Fin,"mm/dd/yyyy") & "#")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas