Envio de mail desde excel

Quisiera saber si es posible hacer los siguiente:

Tengo una hoja de excel con datos desde A1 a G26 y quisiera que hiciera lo siguiente:

Que al dar a un botón me guardara ese rango en un PDF con el nombre que pone K4, en la carpeta del archivo o que me dejara elegir el destino.

Que ese archivo PDF lo mandara por mail a la dirección que ponga en K1, con el asunto que ponga en K2, con el texto del mail que ponga lo que hay en K3

¿Seria posible que hiciera todo eso?

Respuesta
2

Te anexo la macro

Sub Macro5()
'   Por Dante Amor
'
'   Envía rango por correo
'
    'VALIDACIONES
    If Range("K4").Value = "" Then
        MsgBox "Falta el nombre de archivo"
        Exit Sub
    End If
    If Range("K1").Value = "" Then
        MsgBox "Falta el destinatario"
        Exit Sub
    End If
    '
    ruta = ThisWorkbook.Path & "\"
    arch = Range("K4").Value & ".pdf"
    para = Range("K1").Value
    asunto = Range("K2").Value
    cuerpo = Range("K3").Value
    Range("A1:G26").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & arch, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    Set dam = CreateObject("outlook.application").createitem(0)
    dam.To = para
    dam.Subject = asunto
    dam.Body = cuerpo
    dam.Attachments.Add ruta & arch
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Si uso, gmail o yahoo, la macro es diferente???

La macro que te puse es para outlook

Consulta mis respuestas sobre macros para enviar por gmail, yadapta los datos para enviar

No me lo podrías decir, soy un poco torpe buscando, generalmente uso GMAIL y YAHOO, te lo agradecería enormemente que me lo indicaras

Eso lo hubieras comentado desde un inicio

En la siguiente respuesta puedes ver paso a paso como enviar un correo desde excel por gmail.

Sigue los pasos para probar si puedes enviar por gmail. Después de que realices la prueba, adapto la macro a lo que necesitas.

Y para yahoo???

Mañana pruebo gmail

Otro opción es poner en K5, el correo desde donde quiero mandar el PDF y que la macro se ejecute si por gmail, yahoo u outlook

Por favor Dr Amor,

dime como seria la macro para lo que te puse ayer:

Otro opción es poner en K5, el correo desde donde quiero mandar el PDF y que la macro se ejecute si por gmail, yahoo u outlook

Si esto no fuera posible dime como es la macro para poderlo mandar desde gmail y yahoo.

Sí es posible, pero Después puedes ir enriqueciendo tu código. Cuando funcione con gmail, después pruebas con yahoo, y otros correos.

En el siguiente enlace está el código para enviar por gmail, pero tienes que seguir las indicaciones que ahí comento.

Hice el paso 1, pero no se donde poner los siguientes pasos, por favor agradecería muchísimo que me dieras la macro para yahoo, ya que lo necesito de manera mas urgente, o si fuera posible poner el mail desde donde lo quiero hacer celda K5 y que me lo mandars. Muchas gracias

Tienes que seguir TODOS los pasos y con eso envías un correo por gmail.

Para yahoo busca alguna de mis respuestas para enviar correo por yahoo. Buen fin

Dante Amor,

no soy capaz, te cuesta mucho hacerme la macro para que me funcione??

Los pasos que debes seguir los tienes que realizar si o si.

No es que me cueste generar la macro o no, de hecho ya te hice una.

Pero para que funcione la macro que te vaya a hacer, debes realizar los pasos. Porque si no realizas los pasos, simplemente no va a funcionar la macro, entonces de nada va a servir que te haga una macro.


¿No sé cuál es el problema para seguir los pasos?

1. Entra a VBA, al menú herramientas, Referencias, y activa la referencia "Microsoft CDO for Windows 2000 Library"

2. En la macro deberás poner tu usuario y password de tu gmail (no lo publiques en este foro)

    correo = "[email protected]"                 'correo de gmail
    passwd = "pwd"                              'pass de gmail

3. También en la macro deberás poner la hoja y la celda:

    hoja = "Hoja1"                              'Nombre de la hoja
    celda = "D9"                                'celda con el nombre de archivo

4. Así como los datos que van en el correo, destinatario, asunto y cuerpo del correo:

    para = "[email protected]"                 'destinatario
    asunto = "Hoja de Entrega"                  'asunto del correo
    cuerpo = "Se anexa archivo"                 'cuerpo del correo

5. En tu cuenta de gmail deberás activar el "Acceso de aplicaciones menos seguras"

https://www.google.com/settings/security/lesssecureapps 


La macro completa:

Sub EnviarHoja()
'Por.Dante Amor
    correo = "[email protected]"                 'correo de gmail
    passwd = "pwd"                              'pass de gmail
    hoja = "Hoja1"                              'Nombre de la hoja
    celda = "D9"                                'celda con el nombre de archivo
    '
    para = "[email protected]"                 'destinatario
    asunto = "Hoja de Entrega"                  'asunto del correo
    cuerpo = "Se anexa archivo"                 'cuerpo del correo
    '
    Set h1 = Sheets(hoja)
    ruta = ThisWorkbook.Path & "\"
    nombre = h1.Range(celda)
    If nombre = "" Then
        MsgBox "Falta el nombre de archivo"
        Exit Sub
    End If
    '
    h1.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    Dim Email As CDO.Message
    Set Email = New CDO.Message
    Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
        .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1)
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    End With
    With Email
        .To = para
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .AddAttachment ruta & nombre & ".xlsx"
        .Configuration.Fields.Update
        On Error Resume Next
        .Send
    End With
    If Err.Number = 0 Then
        MsgBox "El mail se envió con éxito"
    Else
        MsgBox "Se produjo el siguiente error: " & Err.Number & " " & Err.Description
    End If
    Set Email = Nothing
End Sub

Buenas en que parte de la macro que me hiciste pongo estos datos;

2. En la macro deberás poner tu usuario y password de tu gmail (no lo publiques en este foro)

    correo = "[email protected]"                 'correo de gmail
    passwd = "pwd"                              'pass de gmail

3. También en la macro deberás poner la hoja y la celda:

    hoja = "Hoja1"                              'Nombre de la hoja
    celda = "D9"                                'celda con el nombre de archivo

4. Así como los datos que van en el correo, destinatario, asunto y cuerpo del correo:

    para = "[email protected]"                 'destinatario
    asunto = "Hoja de Entrega"                  'asunto del correo
    cuerpo = "Se anexa archivo"                 'cuerpo del correo

5. En tu cuenta de gmail deberás activar el "Acceso de aplicaciones menos seguras"

antes del

If Range("K4")

en medio de la macro.....

y esto ???

im Email As CDO.Message
    Set Email = New CDO.Message
    Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
        .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1)
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    End With
    With Email
        .To = para
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .AddAttachment ruta & nombre & ".xlsx"
        .Configuration.Fields.Update
        On Error Resume Next
        .Send
    End With
    If Err.Number = 0 Then
        MsgBox "El mail se envió con éxito"
    Else
        MsgBox "Se produjo el siguiente error: " & Err.Number & " " & Err.Description
    End If
    Set Email = Nothing

Sub Macro5()
'   Por Dante Amor
'
'   Envía rango por correo
'
    'VALIDACIONES
    If Range("K4").Value = "" Then
        MsgBox "Falta el nombre de archivo"
        Exit Sub
    End If
    If Range("K1").Value = "" Then
        MsgBox "Falta el destinatario"
        Exit Sub
    End If
    '
    ruta = ThisWorkbook.Path & "\"
    arch = Range("K4").Value & ".pdf"
    para = Range("K1").Value
    asunto = Range("K2").Value
    cuerpo = Range("K3").Value
    Range("A1:G26").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & arch, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    Set dam = CreateObject("outlook.application").createitem(0)
    dam.To = para
    dam.Subject = asunto
    dam.Body = cuerpo
    dam.Attachments.Add ruta & arch
    dam.Send 'El correo se envía en automático
    'dam.Display 'El correo se muestra
End Sub

Son 2 macros distintas una es para outlook y otra para gmail.

y para yahoo??

Te anexo un ejemplo para yahoo

Mandar archivo desde Excel con Yahoo

Mira la macro que he hecho pero me da error, no se el porque.

yo lo que necesito una vez terminada la factura es que me guarde el rango que te comente y que me mande el pdf generado a los destinatarios que he puesto.

Tengo una hoja de excel con datos desde A1 a G26 y quisiera que hiciera lo siguiente:

Que al dar a un botón me guardara ese rango en un PDF con el nombre que pone K4, en la carpeta del archivo o que me dejara elegir el destino.

Que ese archivo PDF lo mandara por mail a la dirección que ponga en K1, con el asunto que ponga en K2, con el texto del mail que ponga lo que hay en K3

Private Sub CommandButton1_Click()
Dim Email As CDO.Message
Function AbrirConexion() As Boolean
correo = "[email protected]"
Password = "URSIS1969"
'AbrirConexion = False
'ahora doy vida al objeto
Set Email = New CDO.Message
'indicamos los datos del servidor:
Email.Configuration.Fields(cdoSMTPServer) = "smtp.mail.yahoo.com"
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'indicamos el nro de puerto. por defecto es el 25, pero gmail usa el 465. hay otro
'(que ahora no recuerdo) pero no me funcionaba... por eso no lo usé mas y lo olvidé
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
'aqui dejamos en claro si el servidor que usamos requiere o nó autentificación.
'1=requiere, 0=no requiere. Para gmail, entonces, 1
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" _
& "configuration/smtpauthenticate") = Abs(1)
'segundos para el tiempo maximo de espera. aconsejo no modificarlo:
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'aqui defino como True (verdadera) a la autentificación para el envío de mails.
Autentificacion = True
'ahora configuramos las opciones de login de gmail:
If Autentificacion Then
'nombre de usuario
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo
'contraseña
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Password
'si el servidor utiliza SSL (secure socket layer). en gmail: True
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
AbrirConexion = True
Else
AbrirConexion = False
End If
End Function
Sub Macro5()

' Por Dante Amor
'
' Envía rango por correo
'
'VALIDACIONES
If Range("K4").Value = "" Then
MsgBox "Falta el nombre de archivo"
Exit Sub
End If
If Range("K1").Value = "" Then
MsgBox "Falta el destinatario"
Exit Sub
End If
'
ruta = ThisWorkbook.Path & "\"
arch = Range("K4").Value & ".pdf"
para = Range("K1").Value
asunto = Range("K2").Value
cuerpo = Range("K3").Value
Range("A1:G26").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ruta & arch, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
Set dam = CreateObject("outlook.application").createitem(0)
dam.To = para
dam.Subject = asunto
dam.Body = cuerpo
dam.Attachments.Add ruta & arch
dam.Send 'El correo se envía en automático
'dam.Display 'El correo se muestra
End Sub
End Sub

Has podido ver la duda que te mande el día 8-10-18

Buenos días

te he enviado un mail el otro día, lo has podido ver??? te lo mando de nuevo por si acaso no te ha llegado

Buenos días,

¿Por qué no me contestas?

¿Qué pasa?

Te envié la macro para outlook, para gmail y para yahoo.

Esto es lo que pediste:

Que al dar a un botón me guardara ese rango en un PDF con el nombre que pone K4, en la carpeta del archivo o que me dejara elegir el destino.

Que ese archivo PDF lo mandara por mail a la dirección que ponga en K1, con el asunto que ponga en K2, con el texto del mail que ponga lo que hay en K3

Y después pediste esto:

Si uso, gmail

Te puse la macro para gmail y los pasos que debes seguir para configurar el envío por gmail

Y también te puse un ejemplo para yahoo.


Esta pregunta está más que contestada y no has tenido la amabilidad de agradecerlo y de valorar la respuesta!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas