Problema con mensaje de error : Type Mismatch que no puedo resolver

Tengo un procedimiento que pretende recorrer una tabla de conceptos y a medida que se posicione en cada uno de ellos ejecute una consulta filtrando por el concepto a otra tabla(Detalle) y mande un mail con el resultado de la consulta en Excel, a un destinatario que depende también del concepto de la tabla.

Me arroja un error : type Mismatch, aunque ejecuta el envío, pero no he podido encontrar el motivo.

1 respuesta

Respuesta
1

Y si no nos muestras el código y, a ser posible, señalando la línea que te da el error, es difícil que podamos echarte una mano, la verdad

adjunto el código , está hecho e access 2010

Private Sub btnenvio_Click()
On Error GoTo Err_btnenvio_Click
Dim dbs As Database
Dim rst As DAO.Recordset
Dim qdfNew As QueryDef
Dim strSql As String
Dim IDform As String
If MsgBox("Envío detalle al cliente." & vbCrLf & "¿Desea continuar?", vbYesNo + vbQuestion, "Mensaje") = vbYes Then
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [Conceptos]", dbOpenDynaset)
rst.MoveLast: rst.MoveFirst
Do Until rst.EOF
IDform = rst!ID
IDform = Format(Me.txtIDD, "##,## 0,00 ")
Set qdfNew = DBEngine(0)(0).QueryDefs("QDiferencia")
'Si no hay otro tipo, puedes modificar así: If Len(rst!Concepto1) > 0 Then
If rst!Concepto1 = "Cobros duplicados" Or "D.Precio u omisión descto" Then
qdfNew.SQL = "SELECT * FROM [2_DetalleDif]" & _
"WHERE [ID] = " & Me.txtIDD & " " & _
"AND [Concepto] = " & Chr(34) & rst!Concepto1 & Chr(34) & " " & _
"AND [Status] = 'Pendiente'"
DoCmd.SendObject acSendQuery, "Qdiferencia", acFormatXLS, "[email protected]", "", "", "", , False, ""
Else
MsgBox "No existen casos por enviar"
End If
rst.MoveNext
Loop
End If
Exit_btnenvio_Click:
rst.Close
Set rst = Nothing
Exit Sub
Err_btnenvio_Click:
MsgBox Err.Description
Resume Next
End Sub

Y la línea que te da el error ¿es la del SendObject?

En tu mensaje inicial decías que el destinatario dependía del concepto. Por tanto, asumo que la línea actual del SendObject no es realmente la que tienes en tu código. ¿Varía mucho?

hola estimado, la linea del error es la del IF

If rst!Concepto1 = "Cobros duplicados" Or "D.Precio u omisión descto" Then

te comento que en realidad la idea es crear if anidados , para que según el concepto que encuentre en la tabla Conceptos, me haga una consulta en la tabla 2_DetalleDif , por los criterios ID (txtIDD) del formulario, el concepto (Campo Concepto1 de la tabla 2_DetalleDif) y el Status .

En linea del SendObject, tienes razón, no está tal cual , pero varía según el concepto, para aplicar un destinatario deferente.

Saludos y gracias por la ayuda.

Aaaah, ya está claro. La línea que te da el error es incorrecta.

Tal como la escribes, estás haciendo un OR de dos cadenas de texto, en lugar de verificar si el valor de Concepto1 coincide con una u otra cadena.

La manera correcta sería:

If rst!Concepto1 = "Cobros duplicados" Or rst!Concepto1 = "D.Precio u omisión descto" Then

OR es un operador lógico. Como tal, opera con operandos lógicos (no con cadenas).

Tanto rst!Concepto1 = "Cobros duplicados" como rst!Concepto1 = "D.Precio u omisión descto" son condiciones lógicas, que pueden ser verdaderas o falsas.

Gracias estimado por la aclaración, me funcionó excelente, pero me ha surgido otra duda, como puedo evitar que envíe una consulta vacía? En la tabla Conceptos , los recorre todos, pero en la tabla 2_DetalleDif pueden existir solo alguno.

Antes de realizar el envío, podrías verificar si tendrás registros.

Por ejemplo, con un If del tipo:

If qdfNew.OpenRecordset.RecordCount > 0 Then

Me podrías especificar mas , donde y como pongo esa línea, mira que estoy hace poco tratando de entender programación.

Se trata de determinar si hay registros para realizar, o no, el envío.

Es decir:

If qdfNew.OpenRecordset.RecordCount > 0 Then

DoCmd.SendObject acSendQuery, ....

End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas