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?
1 Respuesta
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.
Sí
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.
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
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
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
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
¿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!
- Compartir respuesta