Buenas tardes.
Quisiera pedirle a alguien que me revise el código que pongo a continuación, algo está mal pero no consigo saber que..
Situación:
Tengo una consulta "EnvioPrimera" que filtra datos de una tabla y muestra aquellos en los que la columna "Envio_1_reclamacion" está en blanco.
lo que quiero es que la función abra la consulta, y envíe un correo llamando a la funcion Enviar_Email_EnvioPrimera , de forma que mande el correo, escriba la fecha del día de hoy en el cmapo fecha_1_reclamación, lo actualice y pase a la siguiente hasta que todas las lineas de la columna tengan la fecha del día y finalice el proceso.
Para ello tengo el siguiente código:
Private Sub Comando60_DblClick(Cancel As Integer)
Dim rs As DAO.Recordset
If MsgBox("Se va a proceder al envío de 1ª Reclamación, ¿Continuar?", vbYesNo + vbExclamation, "Atención") = vbNo Then Exit Sub
Set rs = CurrentDb.OpenRecordset("Select * from [EnvioPrimera]")
If rs.EOF Then
MsgBox "No hay registros pendientes de reclamar.", vbInformation, "Atención"
Else
Do Until rs.EOF
Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("FECHA_1_RECLAMACION"), rs("CONTRATO"), Date, rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")
rs.Edit
rs("FECHA_1_RECLAMACION") = Date
rs.Update
rs.MoveNext
Loop
MsgBox "Correos Enviados Correctamente.", vbInformation
End If
rs.Close
Set rs = Nothing
End Sub
Copio ademas el inicio de la funcion Enviar_Email_EnvioPrimera:
Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, FECHA_1_RECLAMACION, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)
On Error GoTo Err_CORREO_Click
Dim dbs As Database, qdf As QueryDef, consulta As String
Dim cuerpo As String, para As String, cc As String, asunto As String
Dim comentario As String
Dim CONTRATO As String
Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String, _
Anexo_1 As String, Anexo_2 As String, _
Anexo_3 As String, Anexo_4 As String
Espero alguien me pueda decir donde está el error..
Error de compilación: El número de argumentos es incorrecto o la asignación de propiedad no es válida.
Dicho error me lo marca en:
Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("FECHA_1_RECLAMACION"), rs("CONTRATO"), Date, rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")
Gracias de antemano!.
Un saludo.
Xantus.
Hola!
El mensaje de error te lo dice explícitamente:
Error de compilación: El número de argumentos es incorrecto o la asignación de propiedad no es válida.
Tu función (8 parámetros):
Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, FECHA_1_RECLAMACION, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)
Tu llamada (9 parámetros):
Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("FECHA_1_RECLAMACION"), rs("CONTRATO"), Date, rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")
Saludos!
Cierto.
Sin embargo al quitar el parámetro date y ejecutar me da el siguiente error.
Error de compilación: El argumento no es opcional.
Que puede ser?
Gracias!
estás enmascarando variables...
La declaración de esta función tiene todos los parámetros de tipo variant...
CitarPrivate Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, FECHA_1_RECLAMACION, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)
Pero luego dentro de la función estás declarando variables con los mismos nombres...
Citar...
Dim CONTRATO As String
Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String,
Con lo que forzosamente debe saltarte un error de duplicación de nombre de variables (no recuerdo de memoria el mensaje de erro exacto pero es similar)
Prueba este código para verlo mejor:
Private Sub Command1_Click()
Call Enviar_Email_Envioprimera("hola", " esto no se vera", #11/2/2019#, "blablabla", "ccm", "muy seguro", "no recompramos", "a saber")
End Sub
Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, FECHA_1_RECLAMACION, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)
Dim CONTRATO As String
Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String
MsgBox CONTRATO & vbCrLf & CCM & vbCrLf & GARANTIA_RECOMPRA & vbCrLf & SEGURO
End Sub
Debes declarar en la función el tipo específico del parámetro si es conocido en tiempo de diseño (que asumo que sí), que la mayoría parecen ser strings...
Además el uso de variants debe restringirse a lo estrictamente necesario, es decir cuando forzosamente un parámetro pueda ser igualmente un string, un buleano, un array, etc... porque su uso indiscriminado ralentiza en exceso la operatoria hasta 10 veces, por la comprobación de tipos y enlace en tiempo de ejecución (late binding).
Con lo que si más adelante en el código usas tales variables, en realidad estás usando
Y sobre el argumento no opcional, es que estás omitiendo pasar el valor de un parámetro...
...de todos modos si pones el código completo (de la función llamante y la llamada), podría verse que otros problemas tienes, con código parcial solo se puede indicar lo que se ve.