Envío automático de archivo de Excel

Hola que tal, antes que nada un afectuoso saludo. 

Pues bien, espero que me puedan ayudar con el siguiente código que ya me tiene un tanto desesperado: 

Sub Confirmar()
Dim Resp As Byte
Resp = MsgBox("Desea enviar la minuta?", _
vbQuestion + vbYesNo, "EXCELeINFO")
If Resp = vbYes Then
MsgBox "La minuta fue enviada", vbExclamation, "EXCELeINFO"

Active.Workbook_BeforeSave
Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.logon
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
.To = "[email protected]"
.CC = ""
.Subject = "Envío automático de Excel"
.Body = "Adjunto a este correo os mando el control de kilometraje e incidencias del vehículo utilizado en mi jornada laboral, recibir un cordial saludo "
.Send
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing

Else
MsgBox "Puede enviar la minuta manualmente con el botón enviar", vbCritical, "EXCELeINFO"
End If
End Sub

Objetivo del código: Enviar el archivo de forma automática al presionar "guardar" con previa autorización del usuario. 

Error que marca: 424 se requeire un objeto. 

Ojalá que me puedan ayudar con este código, se los voy a agradecer muchísimo. 

Saludos! 

2 Respuestas

Respuesta
1

Si el archivo que quieres enviar es el mismo archivo que contiene la macro, utiliza la siguiente macro

Sub Confirmar()
'Por.DAM
    Resp = MsgBox("Desea enviar la minuta?", vbQuestion + vbYesNo, "EXCELeINFO")
    If Resp = vbYes Then
        ActiveWorkbook.Save
        Ruta = ThisWorkbook.Path
        Archivo = ThisWorkbook.Name
        Set dam = CreateObject("outlook.application").createitem(0)
        dam.To = "[email protected]"
        dam.Subject = "Envío automático de Excel"
        dam.Body = "Adjunto a este correo os mando el control de kilometraje e incidencias del vehículo utilizado en mi jornada laboral, recibir un cordial saludo "
        dam.Attachments.Add Ruta & "\" & Archivo
        dam.Send
        MsgBox "La minuta fue enviada", vbExclamation, "EXCELeINFO"
    Else
        MsgBox "Puede enviar la minuta manualmente con el botón enviar", vbCritical, "EXCELeINFO"
    End If
End Sub

Muchas gracias estimado. 

Me ha sido de gran utilidad tu ayuda, la macro correo perfectamente bien. Ahora bien, si no es mucha molestia, ¿Podrías enseñarme como hacer para que los correos a los que se envíe el archivo estén en una celda y de esa forma si alguien quiere modificar las direcciones no tenga que entrar al código?

De verdad estoy muy agradecido con la ayuda del foro! 

Recuerda valorar la respuesta

Cambia esta línea

dam.To = "[email protected]"

Por esta

dam.To = range("A5")

Cambia "A5" por la celda que quieras. Puedes poner en la celda varios correos, de esta forma:

[email protected][email protected]

Respuesta
1

En primer lugar comentarte que ante un error en una macro debes indicarnos en qué línea se produce (presionando el botón Depurar te llevará al Editor y allí se marca de amarillo la línea del error). Eso facilita detectar el problema.

En mis pruebas se interrumpe en la línea: Active.Workbook_BeforeSave

Eso no parece una llamada a otra subrutina, ni siquiera parece una instrucción ... revisa o aclara qué intentas ejecutar en este paso y luego me comentas.

Otro detalle (no es un error): estás informando que "La minuta fue enviada" ... pero el proceso aún no empezó ... y quizás no se envíe ;)

Como el proceso de envío suele demorarse algo, quizás sería bueno informar que se está procediendo al envío... es solo una sugerencia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas