Al no saber como son los formularios, me permito decirte que doblas trabajo. Por otro lado, supongo que te convendrá guardar en algún lugar las facturas para demostrar que se las has enviado. Y además, también supongo que te convendrías añadir en la tabla Facturas un campo Enviada(Sí/no) para que no te vuelva a mandar las que ya has enviado.
Mira, yo tengo un formulario Enviar donde me figuran todas las facturas que no hayan sido enviadas ya
El diseño del informe Facturas es
Cuando pulso el botón, me pasa dichos informes, con el numero de factura a PDF y me lo envía al email de cada uno
Y si abriera algún PDF adjunto, vería
Para guardar constancia tengo una carpeta Enviados donde se guardan las facturas enviadas. No vaya a ser que algún día un cliente, para no pagarme, alegue que no se la envié.
El código del botón es un poco largo
Private Sub Comando7_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
DoCmd.OpenReport "facturas", acViewPreview, , "numfactura='" & Me.NumFactura & "'", acHidden
DoCmd.OutputTo acOutputReport, "facturas", "PDFFormat(*.pdf)", "c:\users\gonza\documents\borrar\Enviados\" & Me.NumFactura & ".pdf"
DoCmd.Close acReport, "facturas"
Dim objOutlook As Object
Dim objItem As Object
Dim objNamespace As Object
Dim ADJUNTO As Variant
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objItem = objOutlook.CreateItem(olMailItem)
objNamespace.Logon "EXCELSPACE", , True, True
ADJUNTO = "c:\users\gonza\documents\borrar\Enviados\" & Me.NumFactura & ".pdf"
With objItem
.Attachments.Add (ADJUNTO)
.Display
.To = "" & Me.Email & ""
.CC = ""
.BCC = ""
.Subject = "Estimado amigo" & " " & "" & Me.Idcliente.Column(1) & ""
.Body = "Te mando esta facturilla por si tuvieras a bien abonarmela"
.Send
End With
objNamespace.Logoff
Set objOutlook = Nothing
Set objItem = Nothing
Set objNamespace = Nothing
'Kill "C:\users\gonza\documents\borrar\enviados\" & Me.NumFactura & ".pdf"
DoCmd.RunSQL "update ventas set facturada=true where numfactura='" & Me.NumFactura & "'"
DoCmd.GoToRecord , , acNext
Next
DoCmd.GoToRecord , , acFirst
End Sub
En esencia lo que hace es ir al primer registro.
Abre el informe Facturas correspondiente a ese número de factura( que es texto)
Exporta, en formato PDF, ese informe a la carpeta Enviados con el Num Factura como nombre del archivo.
Envía a la bandeja de salida de Outlook ese archivo como adjunto, a la direccion de correo que aparece en el campo Email.
Me marca en la tabla Ventas( es la que uso yo, la tuya será Facturas) en el campo Facturada( o Enviado, como quieras) que esa factura ya ha sido enviada, para que ya no la vuelva a mandar más.
Pasa al siguiente registro y hace lo mismo. Y así hasta que se acaban los registros del formulario.
Te he puesto en verde la instrucción por si quisieras que una vez enviado el archivo a Outlook te lo elimine de la carpeta Enviados.
En el caso del combinado, sólo me muestra aquellos clientes cuyas facturas están sin enviar(¿para qué va a mostrarme todos los clientes si quizás alguno ya tiene todas sus facturas enviadas?)
Al elegir uno, en el formulario sólo me muestra aquellas facturas correspondientes al cliente elegido y que no hayan sido enviadas, y se repite el proceso del punto anterior. O sea, tienes que copiar el código en el evento Después de actualizar del combinado, pero recordando que antes de la primera línea tienes que poner
me.recordsource="select * from Ventas where Idcliente=" & me.elegircliente & " and facturada=0"
Para que el origen de registros del formulario sean aquellos de la tabla Ventas en que el Idcliente sea igual al que elijo en la columna dependiente del combinado y que no hayan sido enviadas.
Parece un poco lioso, por eso, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando el ejemplo.
Si lo haces, en el asunto del mensaje pon tu alias Carpa951, ya que si no sé quien me escribe ni los abro.