Buena tarde mi consulta es como crear un macro
Q a los 3 minutos de estar abierto una hoja excel ejecute la acción de enviar esta hoja por correo electrónico a varios destinatarios
1 Respuesta
Pon la siguiente macro en los eventos de workbook:
Private Sub Workbook_Open() 'Por.Dante Amor Application.OnTime Now + TimeValue("00:03:00"), "EnviarHoja" End Sub
Instrucciones para poner la macro en los eventos ThisWorkbook
- Abre tu libro de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
- Del lado derecho copia la macro
Pon la siguiente macro en un módulo:
Sub EnviarHoja() 'Por.Dante Amor Application.DisplayAlerts = False Application.ScreenUpdating = False ruta = ThisWorkbook.Path & "\" nombre = ActiveSheet.Name ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=ruta & nombre & ".xlsx" ActiveWorkbook.Close False ' Set dam = CreateObject("outlook.application").createitem(0) dam.to = "[email protected]; [email protected]" dam.Subject = "asunto de mensaje" dam.Body = "Cuerpo del coreo" dam.Attachments.Add ruta & nombre & ".xlsx" dam.Send End Sub
Sigue las Instrucciones para poner la macro en un módulo:
- Abre tu archivo de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la macro
Cambia en la macro lo siguiente:
Los destinatarios deben ir separados por punto y coma (;), todos los destinatarios que pongas deberán ir entre comillas, tal y como se muestra en el ejemplo:
dam.to = "[email protected]; [email protected]"
Cambia el texto "asunto de mensaje", por el mensaje que quieras que aparezca en el asunto.
Cambia el texto "Cuerpo del coreo", por el mensaje que quieras que aparezca en el correo.
Para que se ejecute la macro, cuando abres el libro deberán activarse las macros, a los 3 minutos se enviará la hoja.
Saludos. Dante Amor
Claro, cualquier duda avísame. Si es lo que necesitas.
Al final de mi respuesta dice: “Es una buena respuesta” y puedes seleccionar una de 3 opciones:
- Excelente
- Si
- No
Saludos. Dante Amor
Buen di ate comento que trato que lo envié usando gmail y no outlook pero como esta actual a cada 3 minutos me abre un nuevo libro y yo necesito es que cuando este abierto mi libro que se llama reporte el cual abro como una tarea programada de windows a las 7 de la mañana y luego según la hora se llena de una base de datos entonces es cuando necesito que me lo envíe automático a varios destinatarios pero usando una cuenta de gmail
La macro se ejecuta a los 3 minutos después de que abriste el libro, eso es lo que pediste.
Sigue las instrucciones tal cual las puse y verás que solamente se ejecuta una vez.
Revisa que hayas puesto la macro en los eventos de thisworbook
Cambia la macro que pusiste en un módulo por esta macro para enviar por gmail
Cambia en estas líneas tu correo de gmail y tu password.
correo = "[email protected]"
passwd = "pwd"
Sub EnviarHoja() 'Por.Dante Amor Application.DisplayAlerts = False Application.ScreenUpdating = False ruta = ThisWorkbook.Path & "\" nombre = ActiveSheet.Name ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=ruta & nombre & ".xlsx" ActiveWorkbook.Close False ' Dim Email As CDO.Message ' correo = "[email protected]" passwd = "pwd" ' 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 = "[email protected]; [email protected]" .From = correo .Subject = "asunto de mensaje" .TextBody = "Cuerpo del coreo" .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
Te anexo mi archivo para que lo pruebes.
https://www.dropbox.com/s/rbs7s7k7zqp0j36/correo%20gmail6.xlsm?dl=0
O crea un botón y pones la macro EnviarHoja y ejecutas la macro simplemente presionando el botón.
Sigue las Instrucciones para un botón y ejecutar la macro
- Abre tu libro de Excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la macro
- Ahora para crear un botón, puedes hacer lo siguiente:
- Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
- Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
- Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
- Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: EnviarHoja
- Aceptar.
- Para ejecutarla dale click a la imagen.
Listo ya tienes ambas macros para enviar por outlook y por gmail y me archivo para que revises el funcionamiento.
Saludos. Dante Amor
Recuerda valorar la respuesta.
- Compartir respuesta